获取功能被过度使用

时间:2014-12-27 13:57:30

标签: c scanf gets

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

2 个答案:

答案 0 :(得分:2)

应注意两点:

  • gets是邪恶的,在标准C中不再存在。请改用fgets

  • 使用scanffgets时应该小心,因为scanf会在缓冲区中留下\n个字符,以便下次调用输入读取函数。在\n函数之后,fgets会读取scanf

答案 1 :(得分: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);
    }