c - 将文本文件存储到数组中,但它只打印出最后一行
问题描述
当我想尝试从文本文件中将一些行存储在数组中时,它只会多次打印文本文件的最后一行。
#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;
}
我的文本文件
斯坦努埃斯特
新斯坦
nu'est ot5
minhyun 是 nu'est 成员
它只打印了 minhyun is a nu'est member 3 次。
有人可以帮帮我吗?
解决方案
while (fgets(str, 1000, fp) != 0) {
printf("%s", str); //
}
斯坦努埃斯特
新斯坦
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;
}
推荐阅读
- wpf - WPF:TabControl 和 TabITem 的自定义样式 - 如果所有选项卡都折叠,如何使选项卡标题折叠
- nginx - 缓存 NGINX 代理返回 MISS
- linux - Ubuntu 终端无法启动
- git - 是否可以将两个 .git 文件夹放在一个目录中?
- javascript - 如何从服务器端调用 javascript 函数
- angular - Angular - 无法获取当前用户在警卫中的角色以检查他/她是否有权访问受保护的路线
- angular - Angular - 如何将路由分成模块?
- codenameone - ScaledImageButton 不显示图像
- r - 如何pivot_long 对具有不匹配日期的日期变量组合?
- python - 覆盖 Django RelatedManager 和 Queryset 以过滤通过模型中的字段