错误输入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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Scanf被忽略[重复]

〔杂谈〕关于scanf方法输入字符类型需要加空格问题分析

Printf 与 scanf 要求输入。 BST 循环错误

如果在 C 中使用 scanf 输入字符,如何获取打印错误

怎样检查C语言输入数据的合法性?

scanf与gets