首页 > 解决方案 > C - 从 .txt 文件中读取并将字符存储在数组中

问题描述

我有一个名为“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])不返回数组的第一个字符

请告诉我如何改进我的代码。先感谢您!!

标签: carrayspointerswhile-loopchar

解决方案


  • 打开文件时,您应该始终检查错误并处理它们,例如通知用户并以错误代码结束程序
  • 尝试从文件中读取并且不要预先检查 feof,请阅读为什么“while (!feof (file))”总是错误的?
  • 该赋值array[i] = singleLine;存储了一个指向 singleLine 字符数组的指针,但它将被循环中的下一个 fgets 调用覆盖。作为替代方案,您可以在此处使用例如二维数组并简单地保存第一个字符。
  • 你应该确保不要读更多的行然后你有空间 in 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;
}

推荐阅读