2013-12-23 3 views
1
struct phone 
{ 
     char fname[20]; 
     char lname[20]; 
     char pnumber[20]; 
}; 

int main() 
{ 

int x=0; 
int n; 
char s[100]; 

FILE * f; 

f = fopen("phone book","r"); 

if (f != NULL) 
{ 
    printf("file exist !\n"); 
    while(!(feof(f))) 
    { 
      fscanf(f,"%s,%s,%s",s[x].fname,s[x].lname,s[x].pnumber); 
      x++; 
    } 
} 

printf("1- add"); 
printf("2- query"); 
scanf("%d",&n); 

if(n==1) 
    printf("%s",s[n].fname); 

if(n==2) 
    fclose(f); 

} 

Я пишу эту программу, и есть проблема в fscanfпроект по написанию файла телефонной книги

комментарий к ошибке

'main':| 
    request for member 'fname' in something not a structure or union| 
    request for member 'lname' in something not a structure or union| 
    request for member 'pnumber' in something not a structure or union| 
    request for member 'fname' in something not a structure or union| 
: variable 's' set but not used [-Wunused-but-set-variable]| 

: control reaches end of non-void function [-Wreturn-type]| 
||=== Build finished: 4 errors, 2 warnings (0 minutes, 0 seconds) ===| 
+0

форматировать Ваш код, это нечитаемым. ----- "и есть проблема в fscanf" - да, 'fscanf()' сама по себе проблема, не используйте ее. Вы можете использовать 'fgets()' для чтения строк из файла, затем 'strchr()', 'strstr()', 'strtok_r()' и 'strtol()' для разбора каждой строки. –

+1

сначала, 'char s [100];' -> 'struct phone s [100];' – BLUEPIXY

ответ

0

Для ошибок

request for member 'fname' in something not a structure or union| 
request for member 'lname' in something not a structure or union| 
request for member 'pnumber' in something not a structure or union| 
request for member 'fname' in something not a structure or union| 
: variable 's' set but not used [-Wunused-but-set-variable]| 

Изменение

char s[100]; // is not a structure. You need to declare it as structure 

в

struct phone s[100]; 

и ошибки

control reaches end of non-void function [-Wreturn-type]| 

в качестве возвращаемого типа main является int (а не- void функции, возвращаемого типа, кроме void), необходимо добавить return 0; заявления перед закрывающей фигурной } из main.

1

s объявляется char s[100];, так s[x] является char и не struct phone. Вы должны объявить s как struct phone s[100];, и первая из ваших проблем исчезнет.

0

Ну, компилятор прав. Вы объявляете

char s[100]; 

и пытаетесь получить доступ к его членам, как если бы это был массив структуры. Это всего лишь массив символов.

Я думаю, что вы хотели сделать что-то вроде

struct phone s[100]; 

это объявит массив s из 100 структуры телефона.

Кроме того, обратите внимание, что, хотя это не рекомендуется использовать в этом случае (feof (е)!): Why is “while (!feof (file))” always wrong?

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