【发布时间】:2021-02-25 18:01:22
【问题描述】:
我想创建一个将整数作为变量的程序。我想要一种方法来处理在缓冲区上扫描字符串或字符时引起的错误。我的代码看起来像这样:
int input;
printf("Enter an integer: ");
scanf("%d", &input);
就这么简单,但我希望程序在有人将“test”输入缓冲区时打印出“请输入一个数字”之类的内容,同时仍在使用 scanf。
【问题讨论】:
-
您使用
fgets()(和strtol())作为用户输入...并从您的工具箱中删除scanf()。 -
看看这个处理错误处理的答案:stackoverflow.com/a/5087087
-
如果你想继续使用
scanf,至少你可以在这里测试一下这个函数的返回值等于1。 -
无论出于何种意图和目的,使用
scanf都无法解决此问题。如果你想编写一个在错误输入时表现优雅的程序(这是一个好的和崇高的目标!),实现它的唯一明智的方法是使用scanf之外的技术other。请参阅here 作为开始。scanf根本无法很好地处理错误的输入,并且尝试添加代码以使其很好地处理会遇到越来越多的困难,直到从其他东西开始会容易得多。 -
为什么要使用
scanf?是因为您的老师告诉您必须这样做,还是因为您认为这是在 C 中进行用户输入的正确方法?如果你的老师坚持,我帮不了你,否则,请听从你大概来SO找的专家建议,并了解scanf基本上是可怕。要做任何花哨的事情,使用scanf以外的其他东西比使用scanf容易得多。而且,不幸的是,就scanf而言,“在用户输入错误时提示用户”绝对算作“花哨的东西”。
标签: c error-handling scanf