【问题标题】:C program do-while loop exits after one executionC程序do-while循环在一次执行后退出
【发布时间】:2020-05-06 04:41:24
【问题描述】:

我有一个程序,只要输入的字符是“y”,它就会继续循环,但我的代码在执行一次 do-while 循环后退出。

int main()
{
    char cont;

    do {
        printf("Would you like to continue (y/n)?: ");
        scanf_s("%c", &cont, sizeof(cont));
    } while (cont == 'y');
}

这将按一次按键,然后退出或继续,如预期的那样,但随后立即退出,无需等待更多按键。

【问题讨论】:

  • 这是一个很好的例子,说明为什么不鼓励使用scanf 进行用户输入。读取一行输入时,使用 line-oriented 输入函数,如 fgets() 或 POSIX getline(),然后是 char buf[128]; do printf("continue (y/n)?: "); if (!fgets (buf, sizeof buf, stdin)) { puts ("(user canceled input)"); return 1; }; } while (*buf == 'y');

标签: c loops do-while


【解决方案1】:

似乎在第二次循环中读取了“y”之后的换行符,并且由于换行符不是y而退出了循环。

您应该添加一个空格字符以使其跳过空格字符,如下所示:

scanf_s(" %c", &cont, (unsigned)sizeof(cont));

还要注意scanf_s 的大小参数是unsigned 类型,而不是size_t

scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l | Microsoft Docs

相关:c - What does space in scanf mean? - Stack Overflow

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    • 2023-04-08
    相关资源
    最近更新 更多