【问题标题】:Do...While Loop keeps printing non stop做...而循环不停地打印
【发布时间】:2015-02-21 01:37:51
【问题描述】:

我有这段代码询问用户年龄,如果输入不是数字,它会返回并再次询问用户。但由于某种原因,它只是不停地打印第一个 printf 语句。我做错了什么?

do
{
    printf("Please enter your age: ");
    scanf("%d", &age);
    if (age == 0)
    {
    printf("Please make sure to only enter an integer: ");
    scanf("%d", &age);
    }
} while (isdigit(age) == 0);

【问题讨论】:

  • 注意isdigit() 测试单个character。您正在测试 integer

标签: c


【解决方案1】:

isdigit() 将始终返回0,除了一些特殊值,请尝试52

isdigit() 函数是针对一个 ascii 值,如果 ascii 值对应一个数字,那么它返回1,否则它会返回0,所以对于你输入的大多数数字,结果将是0

如果您需要在输入非数字字符时停止循环,那么您需要检查scanf()返回值,这就是它的用途。

如果你再次尝试向用户询问一个值,就会出现问题,因为如果输入缓冲区中留下了'\n'字符,scanf()会忽略它,继续阅读,导致无限循环,所以这应该适合你

printf("Please enter your age: ");
while ((scanf("%d", &age) != 1) || (age == 0))
{
    int chr;
    do {
        chr = getchar();
    } while ((chr != EOF) && (chr != '\n'));
    printf("Please make sure to only enter an integer: ");
}

【讨论】:

  • 如果你足够大,原始代码可以很好地工作——准确地说,在 48 到 57 岁之间。你们这些年轻人只需要不断地进入你的年龄,直到你足够大,仅此而已。 :D
猜你喜欢
  • 2022-12-05
  • 1970-01-01
  • 1970-01-01
  • 2020-04-18
  • 2017-10-29
  • 1970-01-01
  • 2016-02-11
  • 2017-06-25
  • 2021-12-19
相关资源
最近更新 更多