gpt4 book ai didi

c - 重复输入直到回答正确

转载 作者:行者123 更新时间:2023-11-30 21:46:59 25 4
gpt4 key购买 nike

这个概念非常简单。计算机必须重复问题,直到收到有效的答复。这是我当前的代码:

#include <stdio.h>


int main(int argc, const char * argv[]) {
int age;

do{
printf("How old are you?\n");
scanf("%d", &age);


if (age == 32767)

{
printf("Error, retry: \n");
}

else
{
printf("Cool.");
break;

}
}
while(age!=3267);

return (0);
}

if else 语句的作用是在用户输入非整数的情况下捕获异常。

我尝试使用 do-while 循环,但最终变成了无限循环我使用了 do-while 循环,因为我需要执行该过程,直到获得有效的年龄值。

我当前代码的输出是:

How old are you?
g
Error, retry:
How old are you?
Error, retry:
How old are you?
Error, retry:
How old are you?
Error, retry:

就这样无限期地进行下去。

如果你能帮助我,那就太好了。

最佳答案

  • The computer must repeat the question till it recieves a valid response.
  • It (output) goes like this indefinitely.

原因:

  • 问题在于您在代码中仅接收一次输入,然后进入循环来检查年龄
  • 由于年龄值不会在每次迭代后重新分配,因此如果第一个输入是 !=32767,它总是错误的并且进入无限循环或者也称为奇循环

    scanf("%d", &age); //scans only once

    do //enters loop
    {
    if (age == 32767)
    {
    printf("Error, retry: \n");
    }

    else
    {
    printf("Cool.");
    }
    } while(age!=32767);
<小时/>

The if else statement is to catch the exception incase the user types something that is not an integer.

  • if (age == 32767)只会检查输入的响应是否等于32767

  • 来自@davmac comment ,您永远无法检查输入值是否大于 int 变量的最大值。

  • 相反,如果您以这种方式分配范围会更好

     `if (age > 100 || age <0 )`
<小时/>

解决方案:

为了避免每次迭代都扫描age,并查看我所做的更改:

do{

printf("How old are you?\n");

if(scanf("%d", &age)==1) //checking if scanf is successful or not
{

if (age > 100 || age <0 )
{
printf("Error, retry: \n");
}

else
{
printf("Cool.");
break; //break loop when correct value is entered
}
}

else //if scanf is unsuccessful
{
char c;
printf("enter only integers\n");

do
{
scanf("%c",&c);
}while( c !='\n' && c!= EOF ); //consuming characters
}

}while(1); //always true

关于c - 重复输入直到回答正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38409402/

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