gpt4 book ai didi

c - 如何阻止此代码卡在错误的输入上?

转载 作者:太空宇宙 更新时间:2023-11-04 05:10:48 28 4
gpt4 key购买 nike

我正在通过 Stephen Kochan 的“C 语言编程”学习 C。我正在做第 6 章的第 4 个练习,编写一个代码作为一个简单的累加器计算器。代码如下。只要以正确的方式顺序提供输入,它就可以正常工作。

#include<stdio.h>

int main(void)
{
float num, accum = 0;

char operator;


while(1)

{

printf("Enter the number and the operator ");
scanf("%f %c",&num, &operator);

if (operator == 'E') break;

switch (operator){

case 'S':
accum = num;
printf("= %g\n",accum);
break;

case '+':
accum = accum + num;
printf("= %g\n",accum);
break;

case '-':
accum = accum - num;
printf("= %g\n",accum);
break;

case '*':
accum = accum * num;
printf("= %g\n",accum);
break;

case '/':
accum = accum / num;
printf("= %g\n",accum);
break;
}
}

printf("= %g\n",accum);
printf("End of Calculation\n");

return 0;

}

但它卡在错误的输入上。可以做些什么来检查这种行为?

最佳答案

简短的版本是“不要使用scanf()。”

问题在于 scanf() 仅提供有限的错误指示,并留下未读的错误数据以供下一次调用拾取;特别是如果您懒得进行错误检查,它只会永远在坏数据上旋转。

  1. 总是检查返回码,这样您就知道它是否有效。
  2. 如果您正在进行面向行的输入,请使用 fgets() 或类似方法读取整行,并使用 sscanf() 从行中解析。<
  3. 如果输入与您的预期不符,则采取明智的做法,而不是继续前进。 (您现有的代码只是假定它始终有效。)

关于c - 如何阻止此代码卡在错误的输入上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10071790/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com