[英]Printf() error after entering a function in C
嗨我输入AddEmployee()函数时遇到问题。
当我输入时,我希望它打印出“名字”以提示用户输入名字,但它打印出以下内容:
::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);
}
使用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(),
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;
}
最好将getchar()放在main()中的原始scanf()之后,导致在缓冲区中留下\\n
,考虑@Mike的注释。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.