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

C语言字符串输入输出逻辑错误:VS下竖排打印无输出问题

C语言竖排打印无输出问题分析与解决

问题说明

用Visual Studio编写的C代码,原本想把输入的5行字符按竖排方式打印,但运行后没有任何输出。

原代码

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {
    int i, j;
    char a[5][15] = { 0, };
    for (i = 0; i < 5; i++) {
        for (j = 0; j < 15; j++) {
            scanf("%c", &a[i][j]); 
        }
    }

    for (i = 0; i < 15; i++) {
        for (j = 0; j < 5; j++) {
            printf("%c", a[j][i]);
        }
    }
    return 0;
}

输入样例

AABCDD
afzz
09121
a8EWg6
P5h3kx

预期输出

Aa0aPAf985Bz1EhCz2W3D1gkD6x

实际输出

无任何内容


问题原因

  1. 输入未满足程序要求,导致阻塞:原代码里的scanf("%c")循环要读取5×15=75个字符才会进入打印阶段,但输入样例的总字符数(包括每行末尾的换行符)才31个,远不够75个。程序会一直卡在输入环节,等着用户输入更多字符,根本没机会执行打印代码,所以看不到输出。

  2. 换行符被误读入数组:scanf("%c")会读取所有输入字符,包括换行符。每行输入结束后的换行符会被当成普通字符存进数组,占了位置,但即便如此,总字符数还是不够75,程序依然会卡在输入等待状态。


解决方案

修改输入读取逻辑,只读取每行的有效字符,不需要强制读满15个,这样程序能快速完成输入阶段,进入打印环节。

修正代码(方案一:用fgets读取整行)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

int main(void) {
    int i, j;
    char a[5][15] = { 0, };
    
    // 读取5行,每行最多14个字符(留位置存字符串结束符)
    for (i = 0; i < 5; i++) {
        fgets(a[i], 15, stdin);
        // 去掉fgets读取到的换行符
        size_t len = strlen(a[i]);
        if (len > 0 && a[i][len-1] == '\n') {
            a[i][len-1] = '\0';
        }
    }

    // 按竖排打印,遍历每一列
    for (i = 0; i < 15; i++) {
        for (j = 0; j < 5; j++) {
            // 只打印有效字符,跳过空位置
            if (a[j][i] != '\0') {
                printf("%c", a[j][i]);
            }
        }
    }
    printf("\n");
    return 0;
}

修正代码(方案二:用scanf("%s")读取整行)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {
    int i, j;
    char a[5][15] = { 0, };
    
    // %s自动跳过换行符,读取整行有效字符(无空格时适用)
    for (i = 0; i < 5; i++) {
        scanf("%s", a[i]);
    }

    for (i = 0; i < 15; i++) {
        for (j = 0; j < 5; j++) {
            if (a[j][i] != '\0') {
                printf("%c", a[j][i]);
            }
        }
    }
    return 0;
}

代码说明

  • 两种方案都能正确读取每行的有效字符,避免了强制读满15个字符导致的输入阻塞。
  • 打印时判断字符是否为\0(字符串结束符),不会打印数组里的空位置,确保输出和预期一致。

内容的提问来源于stack exchange,提问作者이시현

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 19:15:56