我的gets()在我的代码中不起作用如何解决此问题

时间:2018-11-20 07:30:53

标签: c

我的代码在命令gets()中存在错误,无法输入字符串名称。我该怎么办?

#include <stdio.h>
#include <string.h>

struct letter {
    char name[20];
    char address[30];
    char message[40];
};

int n,i;

main() {
    printf("Please enter number of employee: ");
    scanf("%d",&n);
    struct letter first[n];
    //1. Keep an information
    for(i=0; i<n; i++) {
        //gets() does not work what wrong with this
        printf("Enter name[%d] : ",i);
        gets(first[i].name);

        printf("\nEnter address[%d] : ",i);
        scanf("%s",first[i].address);
        strcpy(first[i].message, "How r u?");
    }

    // Show an information
    for(i=0; i<n; i++) {
        printf("\nNAME[%d] is %s",i,first[i].name);
        printf("\nAddress[%d] is %s",i,first[i].address);
        printf("\nMessage : %s",first[i].message);
    }
}

2 个答案:

答案 0 :(得分:1)

如果您查看gets函数的人,我们会发现它已被弃用:

  

获取-从标准输入中获取字符串(不建议使用)

一种替代方法是POSIX函数getline(),它可能在您的系统上可用:

#include <stdio.h>
ssize_t getline(char **lineptr, size_t *n, FILE *stream);

使用malloc()分配或重新分配缓冲区,缓冲区的大小更新为* n。初始值应为lineptr = NULL且n = 0。

另一个选择:fgets()-> Man fgets

您在Stack和Google上有很多例子。 祝你好运。

答案 1 :(得分:0)

请澄清一下,为什么它不起作用。根据手册页:

  

gets()从stdin读取一行到s所指向的缓冲区,直到终止换行符或EOF ...

当您执行scanf("%d",&n);时,换行符仍在标准输入中,并读取空字符串。因此,如果您要在循环的第一个scanf和scanf之后添加getchar,则所有功能都应正常工作,但同样,最好使用gets替代方法。