从C中的文本文件读取矩阵[关闭]

问题描述 投票:0回答:3

我正在尝试读取文本文件,该文件是10x5的学生ID和成绩的矩阵。我有一台Chromebook。我已经下载了文件(grades.txt),并且正在下载中。我没有在其他任何地方保存它。我不知道如何fopen并阅读它。我最终不得不为平均学生成绩创建另一列,等等。到目前为止,我已经知道了:

int main();

FILE* spTemp

spTemp = fopen("??", "r");

我如何阅读文本文件?

c matrix text-files fopen
3个回答
1
投票

fopen的语法为somepointer = fopen("path to file(for example: \\\\C:\\myfile.txt)",[r,w,a,b,t])

我想您也可以使用普通的/代替\\

编辑:由于您使用的是Chromebook,因此我认为路径应为:/ home / [您的用户名或时间] /用户/下载


0
投票

例如,初始化文件指针(如您所完成的):FILE *fp当您创建Poiner时,您可以为其分配文件的起始地址。函数fopen()对此非常有用。

示例

文件* fp = fopen(“路径”,“访问修饰符”);

->路径可以是文件的绝对路径,甚至可以是文件名(如果它在同一目录中)

->访问修饰符可以为r,如果要从文件中读取,请w进行写入。存在很多访问修饰符[r,w,a,b,t,w +]等。


0
投票

如果您的输入文件格式为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语言中的输入是一项复杂的任务,需要进行验证以防止缓冲区溢出攻击,内存损坏,错误的类型转换等;我建议进一步研究。

无论如何,我希望这可以帮助您入门。

© www.soinside.com 2019 - 2024. All rights reserved.