错误输入C后结束scanf [重复]
Posted
技术标签:
【中文标题】错误输入C后结束scanf [重复]【英文标题】:Ending scanf after wrong input C [duplicate] 【发布时间】:2020-10-14 13:14:58 【问题描述】:我正在尝试制作 C 计算器应用程序。这意味着有输入“x + y =”,我需要计算结果。我的问题是当用户输入例如“6 + 4”时。这意味着缺少等号。但程序正在等待更多数据。按下回车后如何阻止scanf等待更多数据并只是说这个输入错误?
double x,y;
char c; //this desires if its plus, minus ...
if(scanf("%lf %c %lf =",&x,&c,&y)!=3)
printf("wrong input\n");
return 1;
【问题讨论】:
先用fgets()
读取整行,再用sscanf()
解析怎么样?
您不能将scanf
用于不可预知的输入。您需要使用fgets
,然后自己解析该行,可能使用sscanf
【参考方案1】:
如何阻止scanf在按下回车后等待更多数据并说这个输入错误?
然后如何处理错误/部分读取的输入?留给下一个scanf()
? scanf()
simple 不容易处理不可预测的输入@Jabberwocky。
一种可靠的方法是使用fgets()
读取行,然后对其进行解析。
代码可以使用记录扫描偏移量的sscanf()
和"%n"
来查看扫描是否达到那么远。
char buf[100];
if (fgets(buf, sizeof buf, stdin))
int n = 0;
sscanf(buf, "%lf %c %lf = %n", &x, &c, &y, &n);
if (n == 0 || buf[n] != '\0')
printf("Bad input <%s>\n", buf);
else
printf("Oh happy day! <%s>\n", buf);
更高级的代码可以处理超过 100 行的代码,并使用 strtod()
解析 double
。
【讨论】:
以上是关于错误输入C后结束scanf [重复]的主要内容,如果未能解决你的问题,请参考以下文章