读取文本文件并在c编程中存储在数组中
我想读取文本文件并存储在数组然后显示。
这是我的代码:
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]
它将获得该arrays中第i个位置的角色。 如果你想这样,你可以使用%c
而不是%s
。 并将此更改为。
printf("\n%s", ch);
在使用将访问该变量地址的&符号(&)时打印字符串。
- 开发的程序必须能够使用fopen函数a读取包含矩阵A和矩阵B的输入文件。 不同大小的矩阵A和B可以存储在不同的输入文件中(如果需要)。
- 使用fscanf函数和for循环扫描并将矩阵A和B指定为数组
- 执行矩阵运算a。 添加矩阵A和B b。 减去矩阵A和B c。 矩阵A和B相乘
- 如果或切换用于切换3,4和5元素矩阵,则使用条件语句。
- 使用fprintf函数打印在名为output.dat的新文件中获取的所有输入矩阵和结果。
- output.dat文件必须具有包含以下信息的标头:a。 学生姓名b。 学生matric编号c。 课程部分d。 讲师姓名e。 项目名称
- 在标题下方,输出文件必须包含矩阵A和B以及矩阵运算的结果。 使用矩阵A和B,如下所示: