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

如何在C语言的单行中读取多个字符输入?

解决C语言单行读取多个字符时的换行符干扰问题

你的问题出在scanf("%c")的行为上:%c会读取输入缓冲区里的所有字符,包括换行符(\n)。当你输入一行BBBBBBBB并按下回车后,输入缓冲区里的内容是B B B B B B B B \n(8个B加一个换行符)。循环中每次读取一个字符,前8次读到B,第9次就会读到换行符,后续循环还会等待你继续输入。如果后续打印这些字符,换行符就会导致每个B单独占一行。

至于你尝试的%s格式符没效果,大概率是没正确验证读取结果——%s会自动跳过开头的空白字符,然后读取连续的非空白字符直到遇到空白(比如换行),它会自动在数组末尾加上字符串终止符\0。只要输入是连续的单行字符,%s是可以一次性读取整行有效内容的。

下面给你几种可行的解决方案:

方案1:用%c时跳过空白字符

在%c前加一个空格,让scanf自动跳过所有空白字符(空格、换行、制表符等),只读取非空白的目标字符:

#include<stdio.h>
int main() {
    char arry[10]; 
    for(int i=0;i<10;i++) {
        scanf(" %c", &arry[i]); // 格式符前的空格跳过空白
    }
    // 验证读取结果
    for(int i=0;i<10;i++) {
        printf("%c", arry[i]);
    }
    return 0;
}

方案2:用%s一次性读取整行连续字符

如果输入是无空格的单行字符,%s是更高效的选择,记得限制读取长度避免缓冲区溢出:

#include<stdio.h>
int main() {
    char arry[10]; 
    scanf("%9s", arry); // %9s限制最多读9个字符,留位置存终止符\0
    printf("%s\n", arry);
    return 0;
}

这段代码会一次性读取你输入的所有连续B,直到遇到换行符停止,打印出来就是整行的B。

方案3:用fgets安全读取整行

如果需要读取包含空格的整行,或者想要更安全的读取方式,推荐用fgets,它会读取包括换行符在内的整行内容:

#include<stdio.h>
#include<string.h> // 用于strchr函数

int main() {
    char arry[10]; 
    fgets(arry, sizeof(arry), stdin); // 读取整行,最多9个字符加终止符
    
    // 可选:去掉末尾的换行符
    char* newline = strchr(arry, '\n');
    if (newline != NULL) {
        *newline = '\0';
    }
    
    printf("%s\n", arry);
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 07:33:19