2013-11-20 3 views
1

Поэтому я использую-структуру, чтобы создать адрес, который выглядит следующим образом:создание массива структуры с

typedef struct Address{ 
    char street[100]; 
    char city[100]; 
    char state[3]; 
    int zip; 
}address; 

У меня есть текстовый файл, который выглядит следующим образом:

123 Anywhere 
Spokane 
WA 
99223 
500 Sprague Ave 
Spokane 
WA 
99201 
319F CEB 
Cheney 
WA 
99004 

Когда я прочитал в файле я получаю огромную проблему. Он будет читать в нескольких строках правильно, но все остальное не так. Любые цифры полностью ошибочны.

int fillArray(address *array, FILE * fin){ 
int i=0, total=0; 
do{ 
    fgets(array[i].street, 100, fin); 
    fgets(array[i].city, 100, fin); 
    fgets(array[i].state, 3, fin);  
    fgets(array[i].street, 100, fin); 
    fscanf(fin, "%d", &array[i].zip); 
    total++; 
    i++; 
}while(!feof(fin)); 

return total; 
} 

Очевидно, что я делаю что-то не так, но я не уверен, что я делаю неправильно. Я думал, что если я использую fgets, он получит строку, а затем сохранит ее в области, в которой я нуждался. Я использовал fscanf для всего, что было раньше, и я тоже никуда не денусь. Он просто получит 123, а затем Anywhere в следующие места, так как он будет идти до первого пробела, который он видит. Есть ли способ использовать fscanf для получения всей строки, или это не то, что делает fgets? Есть ли более простой способ сделать это? Да, я знаю, что я не должен использовать while (! Feof (fin)), но наш учитель учит этому прямо сейчас, и это то, что я пока буду использовать. Заранее спасибо. Я искал в Интернете и, похоже, не добираюсь туда, куда мне нужно идти.

+0

Что вы подразумеваете под «Он будет читать в нескольких строках правильно, но большинство всего остального не так».? Можете быть более конкретными? –

ответ

1

Код читает street дважды. Возможно, попробуйте удалить этот второй.

Несвязанный наконечник: вместо жесткого кодирования длиной, такой как 100, используйте оператор sizeof. Например,

fgets(array[i].street, sizeof(array[i].street), fin); 
+0

ха-ха-ха, я даже этого не видел. Исправлено много проблем. Теперь, когда я печатаю, первый адрес хорош, но потом все остальное перепутано. – kevorski

+0

Является ли массив структур инициализированным (либо в стеке, либо с помощью malloc)? –

+0

Что может вызвать отрицательное число в строке? 'Sp --1216999988okane' - это то, что появляется, когда я печатаю – kevorski

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