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

C语言符号矩形打印程序输入列数无效固定输出10列问题求助

问题原因分析
  • 核心问题出在你代码里的scanf("%c");这一行,这里调用scanf读取字符时没有传入存储读取结果的变量地址,属于未定义行为。
  • 你原本的意图是读取输入列数后残留在输入缓冲区的换行符,避免后续读取symbol时读到空字符,但因为scanf缺少接收参数,读取到的换行符(ASCII码值恰好为10)被意外写入了存储columns变量的内存地址,直接覆盖了你之前输入的列数值,所以不管输入什么列数,最终columns都会被改为10,输出固定10列的符号。你测试删除符号输入相关逻辑后程序正常,就是因为连带删除了这行错误的scanf,columns不会再被意外覆盖。
修复方案

有两种可选修复方式,更推荐第二种写法更简洁:

  1. 补全异常行的接收参数,专门存储要丢弃的换行符:
    把scanf("%c");修改为char discard; scanf("%c", &discard);
  2. 直接删除多余的异常行,在读取符号的格式符前加空格,自动跳过缓冲区所有残留的空白字符(包括换行、空格、制表符等):
#include <stdio.h>

int main()
{
    int rows;
    int columns;
    char symbol;

    printf("\nEnter # of rows: ");
    scanf("%d", &rows);

    printf("Enter # of columns: ");
    scanf("%d", &columns);

    printf("Enter a symbol: ");
    // %c前的空格会自动跳过所有前置空白字符
    scanf(" %c", &symbol);

    for(int i = 1; i <= rows; i++)
    {
        for(int j = 1; j <= columns; j++)
        {
            printf("%c", symbol);    
        }
        printf("\n");
    }

    return 0;
}

内容的提问来源于stack exchange,提问作者begger

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:45:03