C 是/否循环未退出

C 是/否循环未退出,c,loops,C,Loops,无论输入哪个字符,循环都不会退出。我可能是瞎子,因为我看不出代码有什么问题。有视力更好的人请帮忙 取出扫描中%c之前的空间 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

无论输入哪个字符,循环都不会退出。我可能是瞎子,因为我看不出代码有什么问题。有视力更好的人请帮忙

取出扫描中%c之前的空间

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;
}

它在我的机器上工作。

在扫描中取出%c之前的空间

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;
}

它在我的机器上工作。

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

因此,要阅读一个字符,您需要:

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

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

因此,要阅读一个字符,您需要:

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

尝试将toupper()的返回强制转换为char。您可以使用调试器吗?输入
Y
后,
user\u input
的值是多少?如果按
Enter
,会发生什么?不要使用
scanf()
获取用户输入–这是固有的缺陷。改为使用
fgets()
。尝试将toupper()的返回强制转换为char。您可以使用调试器吗?输入
Y
后,
user\u input
的值是多少?如果按
Enter
,会发生什么?不要使用
scanf()
获取用户输入–这是固有的缺陷。改为使用
fgets()
。在这个解释中,如果一个非空格格式字符前面有多个空格字符,那么假定的行为就不那么清楚了。是的,这就是我的意思!非常奇怪,可能我的VisualStudio安装不正确,因为我刚刚尝试过,但它仍然不适合我。没有空格时,我收到错误:无效选择是否继续(Y/N)?错误:无效选择是否继续(是/否)?好的,然后使用
var=getch()病态有效,也不需要输入键,在这个解释中,如果一个非空格格式字符前面有多个空格字符,那么假定的行为就不那么清楚了。是的,这就是我的意思!非常奇怪,可能我的VisualStudio安装不正确,因为我刚刚尝试过,但它仍然不适合我。没有空格时,我收到错误:无效选择是否继续(Y/N)?错误:无效选择是否继续(是/否)?好的,然后使用
var=getch()病态有效,无需输入键,谢谢伙计