C - чтение из файла .txt и сохранение символов в массиве - PullRequest
0 голосов
/ 09 февраля 2020

У меня есть файл .txt с именем exampleWheel.txt, который содержит 10 символов: A, M, W, O, S, E, G, L, P, H.

enter image description here

Я пытаюсь сохранить символы в массиве, чтобы позже я мог ссылаться на каждый символ в соответствии с его положением в массиве.

Вот моя попытка:

#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;
}

Операторы printf в то время как l oop возвращают правильный вывод, но два printf вне того времени, пока l oop возвращает неправильные результаты.

т.е. printf ( "array [0] =% c \ n", array [0]) не возвращает первый символ массива

Пожалуйста, покажите мне, как улучшить мой код. Заранее спасибо !!

1 Ответ

1 голос
/ 10 февраля 2020
  • при открытии файла вы всегда должны проверять ошибки и обрабатывать их, например, сообщать пользователю и завершать программу с кодом ошибки
  • пытаться читать из файла и не проверять заранее feof, пожалуйста, прочитайте Почему «while (! feof (file))» всегда неверно?
  • присваивание array[i] = singleLine; сохраняет указатель на массив символов singleLine, но он будет перезаписан со следующим вызовом fgets в l oop. В качестве альтернативы вы можете использовать, например, здесь двумерный массив и просто сохранить первый символ.
  • вы должны следить за тем, чтобы не читать больше строк, чем у вас есть место в 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;
}
...