C语言中该do-while循环为何无法正常运行?
井字棋符号选择代码的问题修复
你的代码有两个关键问题导致循环无法正常工作:
1. 循环条件逻辑错误
原循环条件(symbol != 'X') || (symbol != 'O')永远为真——不管输入的是X还是O,总有一个条件成立(比如输入X时,symbol != 'O'为真;输入O时,symbol != 'X'为真),导致循环永远不会终止。
正确的条件应该用逻辑与&&,表示既不是X也不是O时才继续循环:
while ((symbol != 'X') && (symbol != 'O'));
2. 输入缓冲区残留的换行符问题
使用scanf("%c", &symbol)时,用户输入字符后按下的回车符会留在输入缓冲区中,下一次循环时scanf会直接读取这个回车符,导致程序重复输出提示而不等待新输入。
解决方法是在%c前加一个空格,让scanf自动跳过所有空白字符(包括回车、空格):
scanf(" %c", &symbol);
修正后的完整代码
char symbol; do { printf("Choose Symbol X/O: "); scanf(" %c", &symbol); } while ((symbol != 'X') && (symbol != 'O'));
内容的提问来源于stack exchange,提问作者Dimitris
相关产品推荐
相关产品推荐

