是/否循环不退出

时间:2015-03-16 08:17:17

标签: c loops

int main()
{
    int     valid_input;    /* when 1, data is valid and loop is exited */
    char    user_input;     /* handles user input, single character menu choice */

    valid_input = 0;
    while (valid_input == 0)
    {
        printf("Continue (Y/N)?\n");
        scanf_s("  %c", &user_input);
        user_input = toupper(user_input);

        if ((user_input == 'Y') || (user_input == 'N'))
            valid_input = 1;
        else
            printf("\007Error: Invalid choice\n");
    }

    return 0;
}

无论输入什么字符,循环都不会退出。我可能会失明,因为我无法看清代码的错误。有更好视力的人请帮帮忙!

2 个答案:

答案 0 :(得分:2)

取出scanf_s中%c之前的空格。

Example:
scanf_s("%c", &var);

它在我的机器上运行。

答案 1 :(得分:2)

与scanf和wscanf不同,scanf_s和wscanf_s要求为所有包含在[]中的c,C,s,S或字符串控件集的输入参数指定缓冲区大小。字符的缓冲区大小作为附加参数传递,紧跟在指向缓冲区或变量的指针之后。

所以,要阅读你需要的角色:

scanf_s("  %c", &user_input, 1);

scanf_s documentation page