2013-11-13 3 views
1

Я пытаюсь прочитать серию из 8 целых чисел из файла в массив, а затем отобразить эти целые числа. Я все время испытываю ошибку сегментации в третий раз, и я не могу понять, что я делаю неправильно.Чтение ввода в массив

struct aStruct { 
    int a; 
    int b; 
    ... 
}; 

typedef struct aStruct myStruct; 

while(fgets(line, MAX_LENGTH, file) != NULL) { 
    int myArray[8] = {0}; 
    char* val = strtok (line," ,\n\t\r"); 
    while (val != NULL) 
    { 
     myArray[i] = atoi(val); 
     i++; 
     val = strtok (NULL, " ,\n\t\r"); 
    } 

    myStruct foo; 

    foo.a = myArray[0]; 
    foo.b = myArray[1]; 
      ... 
} 

Входной файл структурирован следующим образом:

0, 0, 1, 5, 0, 0, 0, 0 
1, 0, 2, 5, 0, 0, 0, 0 
2, 0, 3, 5, 0, 0, 0, 0 
3, 0, 4, 5, 0, 0, 0, 0 
4, 0, 5, 5, 0, 0, 0, 0 

При испытании с:

printf("myArray[0]: %d ", myArray[0]); 

Я получаю нечетный вывод 0 0

Где я считаю, что должно быть 0 1. Я не инициализирую что-то правильно, или мой синтаксис new неверен для структуры? Я пробовал несколько разных комбинаций, не могу понять это.

+0

Вкомпилировать со всеми предупреждениями и отладки информации (например, 'г ++ -Wall -g') и ** использовать отладчик ** (например,' gdb'); также 'new' является ключевым словом C++ (а не C). Поэтому вы должны пометить свой вопрос как 'C++' (и улучшить свой код, чтобы быть более подлинным C++, возможно, используя' std :: vector' ..). Также показать больше кода, в частности объявление 'myStruct' ... –

+0

Извините. Я не знал, что 'new' является ключевым словом C++. Я пытаюсь написать все это на C, поэтому, возможно, я должен переключить это. –

+0

Тогда ваш код не является C и не должен компилироваться со стандартным компилятором C (если только если 'new' - это очень странный макрос, вы должны показать его определение). –

ответ

4

Я думаю, что ваша проблема здесь в неинициализированной или не возвращенной переменной i. Добавление i = 0 внутри вашего цикла while может помочь.

while(fgets(line, MAX_LENGTH, file) != NULL) { 
    i = 0; // <<< reseting array index 
    int myArray[8] = {0}; 
    char* val = strtok (line," ,\n\t\r"); 
    while (val != NULL) 
    { 
     //... 
     i++; 
    } 
} 
+0

Ах! Я слепой. Я знал, что это что-то маленькое. Спасибо! –

Смежные вопросы