在我的程序中,我使用如下scanf函数:
if(((scanf("%c %d %d",&zp, &min, &max)) != 3)
|| (zp != 'c' && zp != 'l') || min < 0 || min > max){
if (! feof (stdin)){
printf("Wrong input.\n");
}
else{
return 1;
}
}
所以我希望,当我输入错误的输入,而不是EOF时,将触发printf。如果我输入两个或三个错误值,它可以工作;但是当输入只是一个值时,它什么也不做,并等待第二个值... 例如,当我输入:
l o b
有效;但是当我输入
a
它等待第二个值。
有什么想法为什么不起作用?
答案 0 :(得分:0)
考虑使用fgets
读取一行。
sscanf
可用于解析行。
sscanf
的返回可用于开关中以显示扫描的项目。
#include <stdio.h>
#include <string.h>
int main ( void) {
char line[256] = "";
char zp = 0;
char extra = 0;
int result = 0;
int min = 0;
int max = 0;
printf ( "enter char min max (or done)\n");
while ( fgets ( line, sizeof line, stdin)) {
if ( 0 == strcmp ( line, "done\n")) {
return 0;
}
result = sscanf ( line, " %c %d %d %c",&zp, &min, &max, &extra);
switch ( result) {
case 0:
printf ( "unable to scan any values\n");
break;
case 1:
printf ( "scaned zp: %c\n", zp);
break;
case 2:
printf ( "scaned zp: %c and min: %d\n", zp, min);
break;
case 3:
printf ( "scaned zp: %c min: %d and max: %d\n", zp, min, max);
if ( min < 0) {
printf ( "problem! min %d is LESS than 0\n", min);
}
if ( min > max) {
printf ( "problem! min %d is GREATER than max %d\n", min, max);
}
break;
case 4:
printf ( "too many values scaned!\n");
break;
default:
printf ( "unable to scan any values\n");
break;
}
printf ( "enter char min max (or done)\n");
}
fprintf ( stderr, "fgets problem\n");
return 1;
}