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

求助:如何在C语言中使用for循环读取多个字符串?

解决读取多个字符串的问题

嘿,我来帮你看看代码里的问题~你的代码有几个关键问题导致读取和输出多个字符串失败,我一步步给你拆解:

问题分析

  • 字符串存储结构错误:你定义的char n[50];只是一个能存50个字符的单字符串数组,没法容纳a个独立的字符串。要存储多个字符串,得用二维字符数组,比如char n[50][50];——意思是最多存50个字符串,每个字符串最长支持50个字符。
  • scanf参数类型不匹配:scanf("%s", n[i]);里的n[i]是单个char类型,但%s格式符需要的是字符串的首地址(char*类型)。换成二维数组后,n[i]刚好是第i个字符串的首地址,就能正确匹配了。
  • 输出目标错误:第二个循环里printf("%s\n", n);会一直输出数组的第一个字符串,应该改成printf("%s\n", n[i]);来逐个打印每个字符串。

修正后的代码

#include<stdio.h>
#include<string.h>
int main() {
    int a;
    // 定义二维字符数组,用于存储多个字符串
    char n[50][50];
    scanf("%d",&a);
    // 吃掉scanf读整数后留下的换行符,避免影响后续字符串读取
    getchar();
    
    for(int i=0;i<a;i++) {
        // 用fgets读取更安全,能限制读取长度避免溢出,还能读带空格的字符串
        fgets(n[i], sizeof(n[i]), stdin);
        // 去除fgets自动读入的换行符
        n[i][strcspn(n[i], "\n")] = '\0';
    }
    
    for(int i=0;i<a;i++) {
        printf("%s\n",n[i]);
    }
    return 0;
}

额外小提示

  • 如果你的字符串不需要包含空格,也可以继续用scanf("%s", n[i]),这时候不用加getchar(),因为scanf("%s")会自动跳过换行、空格这类空白字符。
  • fgets相比scanf("%s")更安全,它能防止输入超长字符串导致的缓冲区溢出,还能读取带空格的完整字符串,推荐日常使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:40:08