如何解决如何将文件中的文本读入数组,然后将整个数组打印出来
好的!这个东西很新!
这是一个更大的任务的一部分,我现在遇到的问题是我在文本文件中有一个名称列表(100 个名称)。他们是这样写的:
Sam(输入)Oliver(输入)Paul(输入)---等等。
所以每个名字都在自己的行上。我正在尝试将其读入一个字符数组,然后我将打印出来以检查它是否有效。之后我必须做其他事情,但我想稍后弄清楚。 这是我现在的代码:(文件名等都是芬兰语,所以不要打扰!:D)
#include <stdio.h>
int main() {
FILE *tiedosto;
char *array[100];
char nimi[] = "names.txt";
tiedosto = fopen(nimi,"r");
if (tiedosto == NULL) {
printf("Tiedostoa ei voida avata");
return;
}
int i;
for (i = 0; i < 100; i++) {
fscanf(tiedosto,"%s",&array[i]);
}
fclose(tiedosto);
printf("Tulostetaan taulukko \n");
// printf("%s \n",array);
for (i = 0; i < 100; i++) {
printf("%s \n",array[i]);
}
return 0;
}
解决方法
您在代码中有几个错误:
-
在这一行:
fscanf(tiedosto,"%s",&array[i]);
您无需在此处使用与号。这是因为
array
已经是char*[]
的类型 - 在这种情况下,您必须避免传递char**
。 -
在以下代码段中:
if (tiedosto == NULL) { printf("Tiedostoa ei voida avata"); return; // *** }
main()
的返回类型是一个整数,所以它必须传递一些非空的东西。任何非零返回码都表示程序关闭不成功。 -
在此声明中:
char *array[100];
array
也在数组旁边使用指针。因此,必须正确使用malloc()
函数对其进行初始化,以免遇到段错误。如果你不想被分配内存等弄得一团糟,请尝试切换到二维数组声明:
char array[TOTAL_ENTRIES][PER_NAME_LEN];
我已经描述了避免代码复杂性的二维数组方法(阅读注释以获取解释):
#include <stdio.h>
// Some global macros throughout this program
#define MAX_USERS 100
#define MAX_STRLEN 64
#define EXIT_SUCCESS 0
#define EXIT_FAILURE 1
int main(void) {
const char *file_name = "names.txt";
FILE *fp = fopen(file_name,"r");
char name_list[MAX_USERS][MAX_STRLEN];
int count = 0;
// Using perror() is the best option here
if (fp == NULL) {
perror(file_name);
return EXIT_FAILURE;
}
// Reading the file contents and saving that into 2-D array
while (fscanf(fp,name_list[count++]) != EOF)
;
// Displaying the saved array contents
for (int i = 0; i < count - 1; i++)
fprintf(stdout,"%s\n",name_list[i]);
return 0;
}
在这个程序中,names.txt
文件中的行数可以小于或等于 100。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。