gpt4 book ai didi

C scanf 循环中输入无效

转载 作者:行者123 更新时间:2023-11-30 15:10:57 26 4
gpt4 key购买 nike

我必须执行此 if 语句,否则如果设置了诸如“17d”之类的无效输入,则会陷入无限循环。为什么 ?我认为有缓冲区但 scanf 从 stdin 读取而不是从流读取?

  int age;

while (age != 0) {
printf("How old are you? ");

if(scanf("%d", &age) > 0) {
printf("You are %d years old!\n", age);
} else {
break;
}

}

最佳答案

scanf 不成功时,会将输入保留在流中。您需要忽略该行的其余部分并要求用户再次提供输入。您可以添加一个函数,例如:

void ignoreRestOfLine(FILE* fp)
{
int c;
while ( (c = fgetc(fp)) != EOF && c != '\n');
}

并从main调用它:

if(scanf("%d", &age) > 0) {
printf("You are %d years old!\n", age);
} else {
// Ignore rest of the line and continue with the loop.
ignoreRestOfLine(stdin);
}

另一种选择是一次读取一行数据,并使用 sscanf 从该行中提取数字。

char line[100]; // Make it large enough
while (age != 0)
{
printf("How old are you? ");

if ( fgets(line, sizeof(line), stdin) == NULL )
{
// Problem reading a line of text.
// Deal with it.
break;
}
else
{
if(sscanf(line, "%d", &age) > 0)
{
printf("You are %d years old!\n", age);
}
}

// Try to read again
}

关于C scanf 循环中输入无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35899051/

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