求助:如何在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
相关产品推荐
相关产品推荐

