[英]How do I read a text file and store it in an array in C programming (values seperated by a comma)?
[英]read text file and store in array in c programming
我想读取文本文件并存储在数组中然后显示。
这是我的代码:
int i = 0, line = 5;
char ch[100];
FILE *myfile;
myfile = fopen("test.txt","r");
if (myfile== NULL)
{
printf("can not open file \n");
return 1;
}
while(line--){
fscanf(myfile,"%s",&ch[i]);
i++;
printf("\n%s", &ch[i]);
}
fclose(myfile);
return 0;
}
这是我的文字:
测试123562
856
59986
但是结果:
美东时间
2356
56
9986
怎么了? :(
ch[i]
持有一个字符。
语句
fscanf(myfile,"%s",&ch[i]);
会将字符串扫描到
ch[i]
,该字符串只能容纳一个字符。
没有
'\\0'
地方,它会导致程序出现
未定义的行为 。
更改
fscanf(myfile,"%s",&ch[i]);
至
fscanf(myfile,"%s",ch);
先前的答案是错误的。 程序的行为已明确定义,但您以错误的方式扫描文件。 如果放置i++;
您的程序将按预期运行i++;
在printf
语句之后。
while(line--){ fscanf(myfile,"%s",&ch[i]); printf("\\n%s", &ch[i]); i++; }
原因是&ch[i]
是指向数组第 i 个元素的指针,字符串将从位置i
开始存储在数组中。 对于给定的输入,这将起作用,因为给定的数组足够大以容纳字符串。
您可以这样做:
while(line--){ fscanf(myfile,"%s",ch); printf("\\n%s", ch); i++; }
但每次扫描到字符串时,它将覆盖数组ch
。 最好使用二维数组存储字符串并使用fgets
读取文件。
您将无法在单个char ch[100]
数组中容纳五行; 那只是一个100个字符的数组。
您可以使其成为数组的数组,即char ln[5][100]
,这将为您提供容纳五行的空间,每行100个字符。
然后,您当然需要在循环中索引到该数组,即:
for(int i = 0; i < 5; ++i)
{
if(fgets(ln[i], sizeof ln[i], myfile) == NULL)
{
fprintf(stderr, "Read error on line %d\n", i);
exit(1);
}
}
这使用fgets()
其是在整个行读取更适合; fscanf()
将停在%s
空白处,这很少是您想要的。
获取字符串时,无需在scanf中使用“&”号。 使它变成这样。
fscanf(myfile,"%s",&ch[i]);
至
fscanf(myfile,"%s",ch);
&ch[i]
将获得该数组中第i个位置的字符。 如果您想要这样,可以使用%c
代替%s
。 并将其更改为。
printf("\n%s", ch);
当您使用与号(&)来打印字符串时,该符号将访问该变量的地址。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.