2014-12-27 2 views
-2
typedef struct 
{ 
    char podrucje[32]; 
    char opis[128]; 
}kvar; 

typedef struct 
{ 
    char ime_podnosioca[16]; 
    char prezime_podnosioca[16]; 
    kvar k; 
    int popravljeno; 
}prijava; 
void main() 
{ 
    prijava prijave; 
    printf("Unesite ime i prezime podnosioca:\n"); 
    scanf("%s%s",prijave.ime_podnosioca, prijave.prezime_podnosioca);  
    printf("Unesite podrucje koje obuhvata kvar:\n::>"); 
    gets(prijave.k.podrucje); 
    printf("Unesite opis kvara:\n::>"); 
    gets(prijave.k.opis); 
} 

После того как я отладки приложения, я получаю эту ошибку, вот скриншот: http://www56.zippyshare.com/v/83042434/file.htmlПолучает функция overleaped

+2

Вы используете функцию ('get'), которая устарела и, как известно, вызывает проблемы, и вы задаетесь вопросом, почему у вас возникают проблемы? В чем ваш вопрос? –

+1

Его плохая идея использовать 'void main()', 'gets()' и т. Д. Я знаю, что вы отчаянно ожидаете решения. Просто добавьте 'getchar()' после 'scanf()', и проблема исчезнет! –

ответ

2

Две точки следует отметить:

  • gets является злом и больше не существуют стандарт C. Вместо этого используйте fgets.

  • Вы должны быть осторожны при использовании scanf и fgets вместе, потому что scanf оставляет \n символа в буфере для следующего вызова функции ввода для чтения. Этот \n считывается fgets после функции scanf.

0

Я добавил еще один, и теперь он работает.

typedef struct 
    { 
     char podrucje[32]; 
     char opis[128]; 
    }kvar; 

    typedef struct 
    { 
     char ime_podnosioca[16]; 
     char prezime_podnosioca[16]; 
     kvar k; 
     int popravljeno; 
    }prijava; 
    void main() 
    { 
     prijava prijave; 
     printf("Unesite ime i prezime podnosioca:\n"); 
     scanf("%s%s",prijave.ime_podnosioca, prijave.prezime_podnosioca);  
     printf("Unesite podrucje koje obuhvata kvar:\n::>"); 
     gets(prijave.k.podrucje); 
     **gets(prijave.k.podrucje);** 
     printf("Unesite opis kvara:\n::>"); 
     gets(prijave.k.opis); 
    }