【问题标题】:C - Reading from a .txt file and storing the characters inside an arrayC - 从 .txt 文件中读取并将字符存储在数组中
【发布时间】:2020-05-25 03:41:21
【问题描述】:

我有一个名为“exampleWheel.txt”的 .txt 文件,其中包含 10 个字符:A、M、W、O、S、E、G、L、P、H。

我正在尝试将字符存储在一个数组中,以便以后可以根据每个字符在数组中的位置来引用它。

这是我的尝试:

#include <stdlib.h>

int main()
{
    FILE * fPointer;
    fPointer = fopen("exampleWheel.txt","r");
    int i = 0;

    char singleLine[150];
    const char *array[10];

    while(!feof(fPointer)){
        fgets(singleLine, 150, fPointer);
        array[i] = singleLine;
        printf("%d\n",&array[i]);
        printf("%s\n", array[i]);
        i++;
    }
    fclose(fPointer);

    printf("array[0] = %c\n", array[0]);
    printf("array[1] = %c\n", array[1]);
    return 0;
}

while循环中的printf语句返回正确的输出,但是while循环外的两个printf返回错误的结果。

printf("array[0] = %c\n", array[0]) 不返回数组的第一个字符

请告诉我如何改进我的代码。 提前谢谢你!

【问题讨论】:

    标签: c arrays pointers while-loop char


    【解决方案1】:
    • 打开文件时,您应该始终检查并处理错误,例如通知用户并以错误代码结束程序
    • 尝试从文件中读取,不要预先检查 feof,请阅读Why is “while ( !feof (file) )” always wrong?
    • 赋值array[i] = singleLine; 存储一个指向singleLine 字符数组的指针,但它将被循环中的下一个fgets 调用覆盖。作为替代方案,您可以使用例如这里是一个二维数组,只需保存第一个字符。
    • 您应该确保在array 中没有足够的空间读取更多行,否则您将写入数组的末尾

    你稍加修改的代码可能看起来像这样:

    #include <stdlib.h>
    #include <stdio.h>
    
    
    #define MAX_LINES 10
    
    int main() {
        char singleLine[150];
        char array[MAX_LINES][2];
    
        FILE *fPointer;
        if ((fPointer = fopen("exampleWheel.txt", "r")) == NULL) {
            fprintf(stderr, "can't open file");
            exit(1);
        }
        int i = 0;
        while (i < MAX_LINES && fgets(singleLine, 150, fPointer)) {
            array[i][0] = singleLine[0];
            array[i][1] = '\0';
            printf("%d\n", *array[i]);
            printf("%s\n", array[i]);
            i++;
        }
        fclose(fPointer);
    
        printf("array[0] = %c\n", array[0][0]);
        printf("array[1] = %c\n", array[1][0]);
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 2021-10-25
      • 2012-11-27
      • 1970-01-01
      • 1970-01-01
      • 2013-03-24
      • 2021-07-08
      • 2012-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多