在C中输入函数后出现Printf()错误
您好,我在输入AddEmployee()函数时遇到了一个问题 输入时,我希望它打印出“First Name”以提示用户输入名字,但它打印出以下内容:在C中输入函数后出现Printf()错误,c,C,您好,我在输入AddEmployee()函数时遇到了一个问题 输入时,我希望它打印出“First Name”以提示用户输入名字,但它打印出以下内容: ::Add Employee:: First Name:Last Name: 因此,用户输入的不是名字,而是扫描的姓氏 如何更改代码,使其不会打印出来 First Name:Last Name: 而是 First Name: (whatever user enters) Last Name: (whatever user enters) 这是
::Add Employee::
First Name:Last Name:
因此,用户输入的不是名字,而是扫描的姓氏
如何更改代码,使其不会打印出来
First Name:Last Name:
而是
First Name: (whatever user enters)
Last Name: (whatever user enters)
这是我写的代码
#include <stdio.h>
#include <math.h>
#include <string.h>
struct Employee{
char FirstName[16];
char LastName[16];
char Address[21];
char ID[4];
char Duration[4];
};
void MainMenu();
void AddEmployee();
int main(int argc, char *argv[])
{
MainMenu();
}
void MainMenu()
{
int main_menu = 0;
printf("::Main Menu::\n");
printf("1.) Add Employee:\n");
scanf("%d", &main_menu);
switch (main_menu)
{
default:
{
printf("Invalid Choice!");
break;
}
case(1):
{
AddEmployee();
break;
}
}
}
void AddEmployee()
{
struct Employee employee;
printf("::Add Employee::\n");
printf("First Name:");
fgets(employee.FirstName, 16, stdin);
printf("Last Name:");
fgets(employee.LastName, 16, stdin);
}
#包括
#包括
#包括
结构雇员{
char FirstName[16];
char LastName[16];
字符地址[21];
字符ID[4];
字符持续时间[4];
};
void main菜单();
无效雇主();
int main(int argc,char*argv[])
{
主菜单();
}
void主菜单()
{
int主菜单=0;
printf(“::主菜单::\n”);
printf(“1.)添加员工:\n”);
scanf(“%d”和主菜单);
开关(主菜单)
{
违约:
{
printf(“无效选择!”);
打破
}
案例(1):
{
AddEmployee();
打破
}
}
}
void AddEmployee()
{
结构员工;
printf(“::添加员工::\n”);
printf(“名字:”);
fgets(员工姓名,16,标准名称);
printf(“姓氏:”);
fgets(employee.LastName,16,标准输入);
}
使用getchar()读取缓冲区中剩余的“\n”来清除输入缓冲区
void AddEmployee()
{
struct Employee employee;
printf("::Add Employee::\n");
printf("First Name:");
getchar();
fgets(employee.FirstName, 16, stdin);
printf("Last Name:");
fgets(employee.LastName, 16, stdin);
}
即使在main()中的scanf()之后,也可以添加getchar()
考虑到@Mike的注释,最好将getchar()放在main()中原始scanf()之后,这会导致缓冲区中剩余的
\n
。这不会消耗\n
:scanf(“%d”,&main\u菜单)代码>。因此,第一个fgets()
正在使用用户第一次输入的\n
。@hmjd,为什么这不是一个答案?@CarlNorum,我没有提供一个解决方案,这只是行为的原因。不要将scanf()
和fgets()
@StephenFox-scanf()
和fgets()混为一谈
以不同方式处理换行符。所以,如果你把它们混在一起,你需要知道你最后使用了哪一种输入,以确保你正确地处理换行符。这比它的价值更让人头疼。将getchar()
放在这里假设在调用此函数之前,stdin
上总会有一些挂起的内容。对于当前编写的代码来说,这可能是正确的,但这不是一个好主意,最好在原始的scanf()
调用之后直接清除'\n'
。@Mike ok。我补充了这个来回答
printf("::Main Menu::\n");
printf("1.) Add Employee:\n");
scanf("%d", &main_menu);
getchar();
switch (main_menu)
{
default:
{
printf("Invalid Choice!");
break;
}
case(1):
{
AddEmployee();
break;
}