我的代码在命令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);
}
}
答案 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替代方法。