当我想尝试在文本文件的数组中存储一些行时,它只会多次打印文本文件的最后一行。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
FILE *fp;
char str[1000];
char a[3][1000];
fp = fopen("filename.txt", "r");
if (fp == NULL) {
printf("Could not open file ");
return 1;
}
while (fgets(str, 1000, fp) != 0) {
printf("%s", str);
}
for (int i = 0; i <= 3; i++) {
strcpy(a[i], str);
printf("\n%s\n", a[i]);
}
fclose(fp);
return 0;
}
我的文字档
stan nu'est
新斯坦
新手OT5
minhyun是nu'est成员
它仅打印minhyun是nuest成员的3次。
有人可以帮帮我吗?
最佳答案
while (fgets(str, 1000, fp) != 0) {
printf("%s", str); //
}
stan nu'est
新斯坦
新手OT5
然后在while循环结束后,str将仅存储最后一行,即
minhyun是nu'est成员
在下面编写的for循环中,minhyun是nu'est成员,将被复制到a [i] 4次并打印。
for(int i = 0; i <= 3; i++){
strcpy(a[i], str);
printf("\n%s\n", a[i]);
}
要将整个文本复制到数组str中,可以使用以下给定的代码,
char kr;
int i=0;
do{
kr=fgetc(fp);
str[i++]=kr;
}while(kr!=EOF);
str[i]='\0';
并且,要按顺序将文本的前三行读取到str数组中,可以使用以下给定的代码。
int j=0,k;
for(i=0;i<3;i++,j++)
{
for(k=0;str[j]!='\n'&&str[j]!='\0';j++,k++)
a[i][k]=str[j];
a[i][k]='\0';
printf("\n%s\n", a[i]);
}
这是下面的完整代码,
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *fp;
char str[1000];
char a[3][1000];
fp=fopen("filename.txt","r");
if(fp == NULL)
{
printf("Could not open file ");
return 1;
}
char kr;
int i=0;
do{
kr=fgetc(fp);
str[i++]=kr;
}while(kr!=EOF);
str[i]='\0';
int j=0,k;
for(i=0;i<3;i++,j++)
{
for(k=0;str[j]!='\n'&&str[j]!='\0';j++,k++)
a[i][k]=str[j];
a[i][k]='\0';
printf("\n%s\n", a[i]);
}
fclose(fp);
return 0;
}
关于c - 将文本文件存储到数组中,但仅打印出最后一行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54378310/