簡體   English   中英

在C中輸入函數后出現printf()錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM