我有以下程序:
#include <stdio.h>
#include <stdlib.h> /* for malloc */
#include <ctype.h>
struct employee
{
char first_name[10];
char last_name[10];
long id_number;
float wage;
float hours;
float overtime;
float gross;
struct employee *next;
};
/*-----------------------------------------------------------------------------*/
/* */
/* FUNCTION: print_list */
/* */
/* DESCRIPTION: This function will print the contents of a linked */
/* list. It will traverse the list from beginning to the */
/* end, printing the contents at each node. */
/* */
/* PARAMETERS: emp1 - pointer to a linked list */
/* */
/* OUTPUTS: None */
/* */
/* CALLS: None */
/* */
/*-----------------------------------------------------------------------------*/
void print_list(struct employee *emp1)
{
struct employee *tmp; /* tmp pointer value to current node */
int i = 0; /* counts the nodes printed */
/* Start a beginning of list and print out each value */
/* loop until tmp points to null (remember null is 0 or false) */
for(tmp = emp1; tmp ; tmp = tmp->next)
{
i++;
/* TODO - print other members as well */
printf("\nEmployee ID: %6d, Wage: %8.2f, Hours: %5.2f\n",tmp->id_number,
tmp->wage,tmp->hours);
}
printf("\n\nTotal Number of Employees = %d\n", i);
}
/*----------------------------------------------------------------------------*/
/* */
/* FUNCTION: main */
/* */
/* DESCRIPTION: This function will prompt the user for an employee */
/* id and wage until the user indicates they are finished. */
/* At that point, a list of id and wages will be */
/* generated. */
/* */
/* PARAMETERS: None */
/* */
/* OUTPUTS: None */
/* */
/* CALLS: print_list */
/* */
/*----------------------------------------------------------------------------*/
int main ()
{
char answer[80]; /* to see if the user wants to add more employees */
int more_data = 1; /* flag to check if another employee is to be processed */
char value; /* gets the first character of answer */
struct employee *current_ptr, /* pointer to current node */
*head_ptr; /* always points to first node */
/* Set up storage for first node */
head_ptr = (struct employee *) malloc (sizeof(struct employee));
current_ptr = head_ptr;
while (more_data)
{
/* Read in Employee ID and Hourly Wage */
printf("\nEnter employee ID: ");
scanf("%li", & current_ptr -> id_number);
printf("\nEnter employee weekly wage: ");
scanf("%f", & current_ptr -> wage);
printf("\nEnter employee weekly hours: ");
scanf("%f", & current_ptr -> hours);
printf("\nEnter First Name: ");
scanf(" %c", & current_ptr -> first_name);
printf("\nEnter Last Name: ");
scanf("%c", & current_ptr -> last_name);
printf("Would you like to add another employee? (y/n): ");
scanf("%s", answer);
/* Ask user if they want to add another employee */
if ((value = toupper(answer[0])) != 'Y')
{
current_ptr->next = (struct employee *) NULL;
more_data = 0;
}
else
{
/* set the next pointer of the current node to point to the new node */
current_ptr->next = (struct employee *) malloc (sizeof(struct employee));
/* move the current node pointer to the new node */
current_ptr = current_ptr->next;
}
} /* while */
/* print out listing of all employee id's and wages that were entered */
print_list(head_ptr);
printf("\n\nEnd of program\n");
return 0;
}
我想开始读取First_name和last_name的ifnormation,但是当我提示用户输入first_name时,我输入值,按Enter键,然后跳过last_name请求。我不确定为什么会这样。
答案 0 :(得分:2)
使用%s
代替%c
来读取字符串。当你阅读%c
时,你只得到一个字符,剩下的就留在缓冲区中。
printf("\nEnter First Name: ");
scanf("%s", ¤t_ptr->first_name);
答案 1 :(得分:0)
根据您的问题的理解。我认为你应该在scanf()语句之前调用fflush()函数。可能是你的问题会解决,但我不确定。请确保此函数的语法。
答案 2 :(得分:0)