gpt4 book ai didi

c - Scanf忽略某些类型的输入

转载 作者:行者123 更新时间:2023-11-30 16:10:49 24 4
gpt4 key购买 nike

在我的程序中,我使用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


它等待第二个值。

任何想法为什么它不起作用?

最佳答案

考虑使用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;
}

关于c - Scanf忽略某些类型的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58793160/

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