2014-09-05 3 views
0
#include <stdio.h> 
#include <string.h> 

struct candidate 
{ 
char candidateName[20]; 
int votes; 
}; 



Initialize() 
{ 
    char firstname[10]; 
    char lastname[10]; 
    FILE* ifp; 
    int i; 
    struct candidate electionCandidates[7]; 
    ifp = fopen("elections.txt", "r"); 
    for (i = 0; i<7; i++) 
    { 
     strcpy(electionCandidates[i].candidateName, "aaaaa"); 
     electionCandidates[i].votes = 0; 
    } 
    for (i=0; i<7; i++) 
    { 
     memset(&firstname[0], 0, sizeof(firstname)); 
     memset(&lastname[0], 0, sizeof(firstname)); 

     fscanf(ifp, "%s %s", &firstname, &lastname); 
     strcat (firstname, " "); 
     strcat (firstname, lastname); 
     strcpy (electionCandidates[i].candidateName, firstname); 
     printf("%s", electionCandidates[i].candidateName); 
    } 


} 

int main() 
{ 
    Initialize(); 
    return(0); 
} 

Приведенный выше код должен читать имена и фамилии из файла и добавлять их в часть имени кандидатаName. Когда я запускаю эту программу, она присваивает и печатает имя и фамилию begginning, но затем сразу же падает.Сбой программы при чтении из файла

Файл в формате

first last 

first last 

first last 

и т.д.

Я чувствую, что это может иметь что-то делать с этим не собирается прочитать следующую строку, но я не знаю, как это сделать так. Любая помощь будет принята с благодарностью.

+0

'firstname' выделяет достаточно места для 9 символов плюс завершающий символ NULL. Возможно ли, что 'firstname' + space +' lastname' длиннее этого? –

+0

Кажется, что у многих людей такая же домашняя работа сегодня: http://stackoverflow.com/questions/25691729/how-do-i-assign-values-from-text-file-to-a-structure-of-arrays- в-C –

ответ

1

Проблемы я вижу:

Задача 1

Линия:

fscanf(ifp, "%s %s", &firstname, &lastname); 

является проблемой, если первое имя и/или фамилию в файле ввода длиннее 9 символов.

Чтобы решить эту проблему, укажите максимальное количество символов, которое вы хотите прочитать. Кроме того, с точки зрения типа используйте firstname вместо &firstname.

fscanf(ifp, "%9s %9s", firstname, lastname); 

Задача 2

Линии

strcat (firstname, " "); 
strcat (firstname, lastname); 

является проблемой, если длина firstname + длина lastname больше 8.

Вы можете использовать:

strcpy (electionCandidates[i].candidateName, firstname); 
strcat (electionCandidates[i].candidateName, " "); 
strcat (electionCandidates[i].candidateName, lastname); 

для решения этой проблемы.

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