C 是/否循环未退出
无论输入哪个字符,循环都不会退出。我可能是瞎子,因为我看不出代码有什么问题。有视力更好的人请帮忙 取出扫描中%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
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()代码>病态有效,无需输入键,谢谢伙计