dream_aleaf 2023-10-25 18:48 采纳率: 28.6%
浏览 2

关于#c语言#的问题:当从文件文件读取一系列数据存入到数组时(事先并不知道这个文本文件包含多少行和多少列的数据),那么在C语言中数组大小应该设置为多少(相关搜索:宏定义|数组长度)

当从文件文件读取一系列数据存入到数组时(事先并不知道这个文本文件包含多少行和多少列的数据),那么在C语言中数组大小应该设置为多少?使用宏定义# define可以来设置数组长度,但是应该设置多少呢?有没有人帮忙解答一下,谢谢您啦!

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-25 21:06
    关注

    【以下回答由 GPT 生成】

    在C语言中,可以使用动态内存分配来动态设置数组的大小。具体步骤如下:

    1. 打开文件:使用标准库函数fopen()打开文件,并判断是否成功打开。例如:
    FILE *file = fopen("filename.txt", "r");
    if (file == NULL) {
        printf("无法打开文件\n");
        return;
    }
    
    1. 统计数据行数和列数:通过逐行读取文件内容,并统计行数和列数,来确定数组的大小。例如:
    int rows = 0;
    int cols = 0;
    char line[100]; // 假设每行最多包含100个字符
    
    // 逐行读取文件内容
    while (fgets(line, sizeof(line), file) != NULL) {
        // 统计行数
        rows++;
    
        // 如果是第一行,则统计列数
        if (rows == 1) {
            // 通过分割字符串获取列数,这里假设以空格作为分隔符
            char *token = strtok(line, " ");
            while (token != NULL) {
                cols++;
                token = strtok(NULL, " ");
            }
        }
    }
    
    // 回到文件开头
    rewind(file);
    
    1. 动态分配数组内存:根据统计的行数和列数,动态分配数组的内存。例如:
    int **array = (int **)malloc(rows * sizeof(int *));
    for (int i = 0; i < rows; i++) {
        array[i] = (int *)malloc(cols * sizeof(int));
    }
    
    1. 读取文件内容并存入数组:使用循环逐行读取文件内容,并将数据存入动态分配的数组中。例如:
    char line[100];
    int row = 0;
    int col = 0;
    
    // 逐行读取文件内容
    while (fgets(line, sizeof(line), file) != NULL) {
        char *token = strtok(line, " ");
        while (token != NULL) {
            // 将数据转换为整数并存入数组
            array[row][col] = atoi(token);
            col++;
            token = strtok(NULL, " ");
        }
    
        row++;
        col = 0;
    }
    
    1. 关闭文件并释放内存:完成读取后,关闭文件并释放动态分配的数组内存。例如:
    fclose(file);
    
    for (int i = 0; i < rows; i++) {
        free(array[i]);
    }
    free(array);
    

    通过以上步骤,你可以动态设置数组的大小,并从未知大小的文件中读取数据并存入数组中。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 10月25日