2016-12-06 85 views
0

我需要修改什么,以便在用户做出选择后,提示用户选择的原始语句(两个printfs)会不断重复?例如:在while循环中切换语句。我将如何重复用户的选择?

while(1) { 
printf("What would you like to do next? \n"); 
printf("\tC to create more\n\tD to display\n\tI to insert at beginning\n\tN to exit\n"); 

scanf(" %c", &response); 
switch(response) { 
case 'C' : create(); scanf(" %c", &response); 
case 'D' : display(); scanf(" %c", &response); 
case 'I' : insert_at_beg(); scanf(" %c", &response); 
case 'N': exit(0); 
default : printf("Invaild choice. Bye\n"); exit(0); 
    } 
} 

我知道我的逻辑遍布某些地方。

+3

用'打破替换所有'scanf's在'之开关;' – user3386109

回答

0

这里有两个问题。

之一是:

您没有使用的情况下之间break语句。在你的情况下,不需要在每种情况下都放置scanf语句,只需用break来替换switch中的所有scanf即可。如果有1个以上的情况,则强制使用中断。因为switch不是if ... else语句的替代方法。

二是:

它会进入一个无限循环,因为如果匹配失败的scanf()不会消耗的输入令牌。 scanf()会尝试再次匹配相同的输入。你需要刷新标准输入。 (对输入流进行调用会引发未定义的行为,这是严格的)。

if (!scanf(" %c", &response)) fflush(stdin); 

否则试试这个

if (scanf(" %c", &response) == 0) { break; }