2014-09-05 73 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); 
} 

上述代码应该读取文件中的名字和姓氏,并将它们添加到结构的candidateName部分。当我运行这个程序时,它会分配并打印起始名和姓,但是会立即崩溃。从文件读取时程序崩溃

该文件是在

first last 

first last 

first last 

格式等

我觉得这可能是与它不打算读取下一行,但我不知道该怎么办所以。任何帮助将不胜感激。

+0

'firstname'只为9个字符和终止空字符分配足够的空间。 'firstname' + space +'lastname'是否可能比这个长? – 2014-09-05 21:58:08

+0

似乎很多人今天有相同的功课:http://stackoverflow.com/questions/25691729/how-do-i-assign-values-from-text-file-to-a-structure-of-arrays-在-C – 2014-09-05 22:04:04

回答

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); 

解决这个问题。

相关问题