В C в любом случае способ читать содержимое файла построчно и сохранять каждое целое значение (preline) в массив отдельно? - PullRequest
0 голосов
/ 11 октября 2018

Мой код C выглядит так:

#include <stdio.h>

int main( int argc, char ** argv){

    FILE *myFile;
    myFile = fopen("numbers.txt", "r");

    //read file into array
    int numberArray[16];
    for (int i = 0; i < 16; i++){
        fscanf(myFile, "%1d", &numberArray[i]);
    }

    for (int i = 0; i < 16; i++){
      printf("Number is: %d\n", numberArray[i]);
    }
}

Мой файл numbers.txt содержит следующие значения:

5
6
70
80
50
43

Но по некоторым причинам мой вывод

Number is: 5
Number is: 6
Number is: 7
Number is: 0
Number is: 8
Number is: 0
Number is: 5
Number is: 0
Number is: 4
Number is: 3
Number is: 0
Number is: 0
Number is: 4195904
Number is: 0
Number is: 4195520
Number is: 0

Однако я ожидаю, что он напечатает numberArray, чтобы распечатать идентичное содержимое текстового файла.Я не совсем уверен, почему он это делает, кто-нибудь случайно знает причину?Мне известно, что я делаю массив больше, чем количество значений, которое я могу сохранить, но я все еще не понимаю, почему он не может хранить 70, 80 и т. Д. В одном индексе?

Ответы [ 2 ]

0 голосов
/ 11 октября 2018
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    FILE *myFile = fopen("numbers.txt", "r"); // just init your variable directly
    if (!myFile) { // Always check if there is no error
        return EXIT_FAILURE; // handle it as you like
    }

    #define SIZE 16 // Avoid magic number
    int numberArray[SIZE];
    size_t n = 0; // n will represent the size of valid values inside the array
    // Always check if scanf family has parsed your input also "%1d" ask to only parse
    // one digit, so use %d if you want parse an integer
    while (n < SIZE && fscanf(myFile, "%d", numberArray + n) == 1) {
        n++;
    }

    for (size_t i = 0; i < n; i++) {
      printf("Number is: %d\n", numberArray[i]);
    }
}
0 голосов
/ 11 октября 2018

Это потому, что вы читаете только 1 цифру за раз.

Следовательно, измените ниже.

fscanf(myFile, "%1d", &numberArray[i]);

на

fscanf(myFile, "%d", &numberArray[i]);

И ваш массив долженбыть размером с целое число в файле.

int numberArray[6];

for (int i = 0; i < 6; i++)

или

while (fscanf(myFile, "%d", &numberArray[i++]) == 1);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...