【发布时间】:2015-08-31 07:07:48
【问题描述】:
在我的 C 程序中,我调用了两次 gets() 来获取用户的输入。第一次要求用户输入全名,第二次要求用户输入朋友全名。但是,在第二次调用 gets() 时,它不会等待用户的输入,它只是跳过它并完成程序。这是我的完整代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
int main()
{
char fullname[30];
char friendsname[30];
char sentence[70]= "";
char gender;
printf("Enter your full name: ");
gets(fullname);
printf("\n");
printf("%s , Please enter your gender(m/f)? : ", fullname);
scanf("%c", &gender );
puts("\n");
if(gender =='m')
{
printf("Mr. %s , please enter your friends name:", fullname);
gets(friendsname);
puts("\n");
}
else if(gender =='f')
{
printf("Mrs. %s , please enter your friends name:", fullname);
gets(friendsname);
puts("\n");
}
strcat(sentence, "Hello Mr./Mrs. ");
strcat(sentence, friendsname );
strcat(sentence, ", " );
strcat(sentence, fullname);
strcat(sentence, " considered you as a friend. ");
puts(sentence);
return 0;
}
这是一个示例输出:
输入您的全名:布拉德·皮特
布拉德皮特,请输入您的性别(男/女)? : 米
先生。布拉德皮特,请输入您的朋友姓名:
你好先生/女士。 ,布拉德·皮特把你当朋友。
进程返回 0 (0x0) 执行时间:8.110 秒 按任意键继续。
gets(friendsname); 行已被完全跳过,程序由于某种原因继续运行。谁能解释为什么会这样?
【问题讨论】:
-
第一条建议是:不要使用
gets,而是使用fgets。 -
在每个
gets之后使用getchar显式读取换行符 -
欢迎来到 SO。
gets已从最新的 C 标准中删除,请勿使用。另外,请在此处询问时正确缩进您的代码。让我们更容易阅读。 -
gets已从 C 语言中删除,因此您不应该使用它。