我有一个程序,用户输入3个数字,然后计算二次公式。我唯一的问题是,当用户输入“1,2,3,4”时,我的程序无法按照我想要的方式运行。它的作用是像“1,2,3”那样正常计算,但之后再次尝试“4”。我想告诉用户他们输入的输入无效,但不知道如何输入。
以下是我的代码:
printf("Please enter the coefficients a, b, c: ");
num = scanf("%f, %f, %f", &a, &b, &c);
if (num != 3) {
printf("Invalid argument\n");
break;
}
我怎样才能让它意识到4个字符是一个糟糕的输入。 (注意:如果我只输入“1,2”或更少的东西,它可以工作)
答案 0 :(得分:4)
你可以写:
if ( num != 3 || getchar() != '\n' )
如果您打算在循环中使用此代码(或者在此之后确实有任何其他输入),那么您可能希望在此{ }
的{{1}}内刷新缓冲区:
if
答案 1 :(得分:3)
接受回答后
“如果我只输入”1,2“或更少的东西,它就有效”。令人怀疑:尝试输入“1,2”(添加逗号) - 它只会坐在那里等待更多输入。解决方案是读取行,然后解析它是否可接受。
for (;;) {
printf("Please enter the coefficients a, b, c: ");
char buf[100];
if (fgets(buf, sizeof buf, stdin) == NULL) Handle_EOForIOerror();
int n = 0;
sscanf(buf, "%f ,%f ,%f %n", &a, &b, &c, &n);
if (n > 0 && buf[n] == '\0') {
// Success - Not too much, not too little, just right
break;
}
}