gpt4 book ai didi

c - 如何阻止我的代码使用 scanf 生成无限循环?

转载 作者:太空宇宙 更新时间:2023-11-04 04:43:58 25 4
gpt4 key购买 nike

这是一个从 main 调用的函数。如何让这段代码检查字母输入,并在检测到输入不是整数时进入 while 循环?谢谢

int time1(void)
{
int hour;

printf("Enter the hour: ");
scanf("%d", &hour);

while (hour > MAX_HOUR || hour < MIN_HOUR)
{
printf("Invalid hour input. Please enter an hour between 1 and 12: ");
scanf("%d", &hour);
}

return hour;
}

最佳答案

测试是否成功:

hour = -1;   // So you can detect afterwards if they never succeeded at all

while ( 1 == scanf("%d", &hour) )
{
if ( hour >= MIN_HOUR && hour <= MAX_HOUR )
break;

printf("Invalid hour input, try again...");
}

例如,如果他们输入 "hello",该版本就会中断。如果你想在他们输入垃圾后继续询问他们,那么你必须从流中清除所有垃圾,例如:

for (;;)
{
int result = scanf("%d", &hour);

if ( result == EOF )
{
hour = -1;
break;
}

if ( result != 1 )
{
// consume garbage which will end in a newline
for (int ch; (ch = getchar()) != EOF && ch != '\n'; ) {}
continue;
}

if ( hour >= MIN_HOUR && hour <= MAX_HOUR )
break;

printf("Invalid hour input, try again...");
}

在 C 中做健壮的流输入并不简单!

关于c - 如何阻止我的代码使用 scanf 生成无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23038683/

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