2016-01-20 2 views
0

эй, поэтому я пытаюсь читать числа из текстового файла и помещать их в массив, но я получаю странные числа, когда пытаюсь их распечатать. текстовый файл выглядит так:C Чтение чисел из файла в массив

45 
77 
8 
... 

Я думаю, что что-то не так с петлей, которую я использую, но я не могу понять, что. Спасибо за помощь!

код:

#define MAX_ARRAY_SIZE 20 

int main(int argc, char * argv[]) 
{ 
    FILE *myFile; 
    int myArray[MAX_ARRAY_SIZE]; 
    //char filename[32]; 
    //printf("enter filename\n"); 
    //scanf("%s", filename); 

    myFile = fopen("asdf.txt", "r"); 
    if (!myFile) { 
     printf("cant open file\n"); 
     return 1; 
    } 
    int status; 
    int i = 0; 
    while ((status = fscanf(myFile, "%2d", &myArray[i])) == 1 && i < MAX_ARRAY_SIZE - 1) { 
     ++i; 
    } 
    fclose(myFile); 


    int a; 
    for (a = 0; i < MAX_ARRAY_SIZE; ++i) { 
     printf("%d ", myArray[i]); 
    } 
    printf("\n"); 
return 0; 
} 
+0

'for (a = 0; a BLUEPIXY

ответ

0

Проблема заключается в цикле печати:

for (a = 0; i < MAX_ARRAY_SIZE; ++i) 

Там нет никакой гарантии, вы читаете MAX_ARRAY_SIZE значения. Кроме того, если вы используете 'a' в качестве итератора цикла, вам необходимо использовать 'a'. Ваш цикл должен быть:

for (a = 0; a < i; ++a) 
    printf("%d ", myArray[a]); 

Вам также не нужен полевая ширина в вашем формате спецификатор, fscanf(myFile, " %d", &myArray[i])) будет делать.

+0

Да: D я использовал« i »раньше и забыл изменить их все на: D thx – Nils

0

Попробуйте

while ((status = fscanf(myFile, "%d\n", &myArray[i])) == 1 && i < MAX_ARRAY_SIZE - 1) { 
    ++i; 
} 
0

Истинный ... Я еще не видел код петли печати .. Извините. Проблема в контуре печати не fscan, пожалуйста, игнорируйте мой ответ

+0

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