字符输入无法按预期使C语言乘法表程序循环续行问题
乘法表程序循环异常的修复方案
问题分析
你的程序存在三个核心问题,导致输入'y'后循环无法正常执行:
- 计数器K未重置:每次执行完内层乘法表循环后,K的值停留在
N+1,下一次进入外层循环时,内层循环的while(K <= N)条件直接不成立,乘法表不会输出。 - 输入缓冲区的换行残留:读取整数的
scanf("%d")会把用户输入回车后的\n留在缓冲区,后续读取字符的scanf("%c")会直接读取这个换行符,导致ch的值不是你输入的Y/N。 - 大小写判断不全:循环条件只判断了小写
'y',如果输入大写'Y',循环会直接终止。
修复后的代码
#include <stdio.h> #include <conio.h> int main() { int T, N, P; int K; char ch; do { K = 1; // 每次循环开始时重置计数器 printf("\nWhich Number's Table do you want?"); scanf("%d", &T); printf("\nTable should be Uptil?"); scanf("%d", &N); do { P= T * K; printf("\n %dx%d = %d", T, K, P); K= K + 1; } while(K <= N); printf("\nDo you want to continue (Y/N)?"); scanf(" %c", &ch); // 跳过缓冲区残留的空白字符 } while (ch == 'y' || ch == 'Y'); // 同时支持大小写Y getch(); }
关键修改说明
- 重置计数器:将
K的初始化移到外层do-while循环内部,每次生成新乘法表时,计数器从1重新开始。 - 清理输入缓冲区:把
scanf("%c ", &ch)改成scanf(" %c", &ch),%c前的空格会自动跳过缓冲区中的所有空白字符(包括之前残留的换行符),确保读取到用户实际输入的字符。 - 兼容大小写输入:循环条件改为
ch == 'y' || ch == 'Y',无论用户输入大写还是小写Y,程序都会继续循环。
内容的提问来源于stack exchange,提问作者Nameless
相关产品推荐
相关产品推荐

