C语言二维数组输入错误后怎么报错重新输入

说白了,数据录入错误有两种:格式不正确和范围过大。
这个问题的复杂性在于如何优雅地处理它。

我们先来说说最重要的事情。
如果格式不正确,可以使用scanf返回的值来修复。
去年我们运行这个项目时,用户输入了一系列字母,直接用“%d%d”读取。
返回的值是0,他立刻就知道出了问题。
我记得我的一位朋友编写了一个无限循环。
结果,当发生输入错误时,缓冲区就会爆炸,整个程序就会崩溃。
后来我发现fflush(stdin)是用来清除缓冲区的。
这一步一定要加上,否则输入错误会污染后续的读数。
还有一点,如果输入是“1 2 a”,scanf会在读到“a”时停止,所以返回值可以帮助你定位错误的位置。

还有另一个非常关键的细节。
若超出标准范围,须个别判断。
例如,如果输入-1 或1 01 ,尽管格式正确,但在商业上不合法。
当年测试时,有一位新手用户从未更改过负数的输入。
最后他用if(a<0>1 00)添加了一个友好的提示,效果立竿见影。
一开始我以为直接用 continue 跳过就可以了,后来发现用户永远无法离开输入框,必须要break才能彻底结束循环。

等一下,还有一件事。
如果用scanf处理中文输入,会直接崩溃。
推荐使用fgets+sscanf组合。
虽然问题比较多,但是兼容性很好。
说实话,这很令人困惑。
很多人不注意这一点。

建议下次写代码的时候,格式检查和范围检查不要分开,可以一起判断效率。
你怎么认为?

用C语言,输入10个学生的姓名、学号和成绩,将其中不及格者的姓名、学号和成绩输出。(二维数组,不用指针

需要明确的是:该程序用于输入和打印学生信息。
其实很简单。
它定义了一个结构体STU来存储学生姓名、学号和成绩,然后在main函数中创建一个包含1 0个学生信息的数组。

我们先来说说最重要的事情。
程序的主要逻辑如下:首先要求用户输入每个学生的姓名、学号和成绩,然后存储在一个数组中。
接下来,打印所有学生的信息,但只打印分数低于 6 0 分的学生。

还有一点:程序使用 scanf 函数读取输入,使用 printf 格式化输出。
有一个重要的细节:分数在6 0分以下的学生信息左对齐显示,学号和分数右对齐显示。
这是通过格式化输出来实现的。

我一开始以为这个程序没有什么问题,后来发现是错误的。
再等一下:如果用户输入的注释不是整数,则 scanf 会出错,因为它需要三个整数输入。
很多人并没有注意这个陷阱。

所以我的建议是您考虑在读取结果之前添加输入验证,以确保用户输入有效的整数。
这样程序可以更加健壮并且不易出错。
你怎么认为?