【问题标题】:C Scanf input testing for expected input formatC Scanf 输入测试预期的输入格式
【发布时间】:2018-10-24 07:37:05
【问题描述】:

我需要制作一个简单的 C 程序,它会以预期的格式求解二次方程,需要像这样:

a x^2 + b x + c = d x^2 + e x + f

我正在使用 scanf 读取输入,它按预期工作。但我需要为我的 scanf 读数实施一些输入测试,就像现在这样:

scanf("%f x^2 + %f x + %f = %f x^2 + %f x + %f", &a, &b, &c, &d, &e, &f);

对于每个输入,我需要printf("Wrong input\n");,例如 f.e.

'abc', '1 x^2 + 1 x + 1 = 0', 'x^3...'

我尝试了if (scanf() != 1),但它每次都会打印“错误输出”。 关于如何实现这一点的任何想法?

【问题讨论】:

  • 试试if (scanf(....) != 6)
  • 它可以,但是当输入不完整时如何完成'错误输入'? F.e.如果我只输入 '1 x^2 + 1 x + 1 = 0' 它会等待下一个可能的输入...
  • 您可能必须开始将用户输入作为字符串读取并自己解析。
  • @JiříPašek 检查我的回答,它会告诉您如何处理您的用例。

标签: c testing input scanf


【解决方案1】:

如果我只输入 '1 x^2 + 1 x + 1 = 0' 它会等待下一个可能 输入。

在这种情况下,使用fgets 读取完整输入并使用sscanf 解析值,如下所示。

  char buf[100];
  fgets(buf,sizeof buf,stdin);

  int r = sscanf(buf,"%f x^2 + %f x + %f = %f x^2 + %f x + %f", &a, &b, &c, &d, &e, &f);
  if (r!=6)
     printf("Wrong input\n");
  else
     printf("correct\n");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多