![](/img/trans.png)
[英]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.