我正在尝试读取文本文件,该文件是10x5的学生ID和成绩的矩阵。我有一台Chromebook。我已经下载了文件(grades.txt),并且正在下载中。我没有在其他任何地方保存它。我不知道如何fopen
并阅读它。我最终不得不为平均学生成绩创建另一列,等等。到目前为止,我已经知道了:
int main();
FILE* spTemp
spTemp = fopen("??", "r");
我如何阅读文本文件?
fopen的语法为somepointer = fopen("path to file(for example: \\\\C:\\myfile.txt)",[r,w,a,b,t])
我想您也可以使用普通的/
代替\\
。
编辑:由于您使用的是Chromebook,因此我认为路径应为:/ home / [您的用户名或时间] /用户/下载
例如,初始化文件指针(如您所完成的):FILE *fp
当您创建Poiner时,您可以为其分配文件的起始地址。函数fopen()
对此非常有用。
示例:
文件* fp = fopen(“路径”,“访问修饰符”);
->路径可以是文件的绝对路径,甚至可以是文件名(如果它在同一目录中)
->访问修饰符可以为r
,如果要从文件中读取,请w
进行写入。存在很多访问修饰符[r,w,a,b,t,w +]等。
如果您的输入文件格式为5个数字,并用空格分隔(我假设10x5表示高度x宽度),则此方法应该有效。请注意,grades.txt
与.exe
或.out
文件位于同一文件夹中。
#include <stdio.h>
int main() {
int i, j;
int n[10][5];
int n_rows = 0;
int n_cols = 5;
FILE *fp = fopen("grades.txt", "r");
// read 5-col matrix from file
for (; EOF != fscanf(fp, "%d %d %d %d %d",
&n[n_rows][0], &n[n_rows][1], &n[n_rows][2],
&n[n_rows][3], &n[n_rows][4]); n_rows++);
// print the matrix
for (i = 0; i < n_rows; i++) {
for (j = 0; j < n_cols; j++) {
printf("%d ", n[i][j]);
}
puts("");
}
fclose(fp);
return 0;
}
输出(与源文本输入相同:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
26 27 28 29 30
31 32 33 34 35
36 37 38 39 40
41 42 43 44 45
46 47 48 49 50
如果您想使用10宽度,我敢肯定fgets
是一个不错的解决方案,但是在紧要关头,向fscanf
添加更多参数可以做到这一点。
而且,由于您要处理学生的ID和年级,我想您是将数据存储在结构中,而不是如本例中的int数组。
如评论中所述,请记住,读取C语言中的输入是一项复杂的任务,需要进行验证以防止缓冲区溢出攻击,内存损坏,错误的类型转换等;我建议进一步研究。
无论如何,我希望这可以帮助您入门。