gpt4 book ai didi

c++ - for if语句,虽然为true,但是又循环了

转载 作者:行者123 更新时间:2023-11-30 21:34:10 26 4
gpt4 key购买 nike

#include <stdio.h>

void clearKeyboard(void){

while(getchar()!='\n');
}

void pause(void){

printf("Press <ENTER> to continue...");
clearKeyboard();
}


int getMenuChoice(void){

int choice;
printf("1- List all items\n");
printf("2- Search by SKU\n");
printf("0- Exit program\n> ");

scanf("%d", &choice);

return choice;
}

int getYesOrNo(void){

char ch;
int ret;
ch = 0;
ret = 0;

while(ch != 'Y' || ch != 'y' || ch != 'N' || ch != 'n')
{
scanf("%c", &ch);
clearKeyboard();
if (ch == 'Y' || ch == 'y'){
ret = 1;
return ret;
}
if (ch == 'N' || ch == 'n'){
ret = 0;
return ret;
}
else if (ch != 'Y' || ch != 'y' || ch != 'N' || ch != 'n'){
printf("Only (Y)es or (N)o are acceptable: ");
}
}
return ret;
}

int main(void){

int choice;
int temp = 0;
choice = 0;

printf("=== TEST MENU ===\n");
pause();
while(temp == 0){
choice = getMenuChoice();
if (choice != 0){
printf("*** not implemented ***\n");
}
else{
printf("Do you really want to quit? ");
temp = getYesOrNo();
}
}
printf("=== END OF MENU TEST ===\n");

return 0;

}

当代码运行时,它应该打印出测试菜单我必须按 Enter 继续

然后,它会显示多个打印语句(listall..search by...exit)

所以,如果用户输入 0,它会询问你是否真的要退出,如果用户输入 y,它应该退出

然而,问题是程序在询问“你真的要退出吗?”之后,再次询问用户不必要的问题“只能接受(Y)es或(N)o”。当我已经输入 y 时,这是有效的答案。

这是为什么?

p.s 库是否存在

最佳答案

scanf("%d", &choice);仅消耗数字字符(也会在任何其他输入上崩溃,iirc),但不消耗\r\l 或\n 字符,如果我是正确的(请有人纠正我),这些字符将在 getYesOrNo 函数期间消耗。这就是为什么程序应该在询问您是否真的要退出后直接显示 (y)es/(n)o 提醒。

这也是添加clearKeyboard函数使其按预期工作的原因。

关于c++ - for if语句,虽然为true,但是又循环了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40553497/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com