You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

字符输入无法按预期使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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 03:25:20