我正在尝试在基本的Ubuntu GCC编译器中运行以下代码,这是一个基本的C类。
我希望名称可以包含空格。
当我输入结构的值时,问题就出现了。我能够第一次输入名称,但是随后的迭代甚至不提示我输入。
我尝试使用
第一个结构的输出很好,但是对于其余的结构,输出要么是垃圾,要么是人的姓氏,要么就是空白。
有什么想法吗?
#include<stdio.h>
struct emp
{
int emp_num, basic;
char name[20], department[20];
};
struct emp read()
{
struct emp dat;
printf("\n Enter Name : \n");
scanf("%s", dat.name);
printf("Enter Employee no.");
scanf("%d", &dat.emp_num);
//printf("Enter department:");
//fgets(dat->department,20,stdin);
printf("Enter basic :");
scanf("%d", &dat.basic);
return dat;
}
void print(struct emp dat)
{
printf("\n Name : %s", dat.name);
printf("\nEmployee no. : %d", dat.emp_num);
//printf("Department: %s", dat.department);
printf("\nBasic : %d\n", dat.basic);
}
int main()
{
struct emp list[10];
for (int i = 0; i < 3; i++)
{
printf("Enter Employee data\n %d :\n", i + 1);
list[i] = read();
}
printf("\n The data entered is as:\n");
for (int i = 0; i < 3; i++)
{
print(list[i]);
}
return 0;
}
我希望名称可以包含空格。
当我输入结构的值时,问题就出现了。我能够第一次输入名称,但是随后的迭代甚至不提示我输入。
我尝试使用
fgets
、scanf("%[^\n]",dat.name)
甚至 gets()
(我很绝望),但每次都面临着相同的问题。第一个结构的输出很好,但是对于其余的结构,输出要么是垃圾,要么是人的姓氏,要么就是空白。
有什么想法吗?
%Ns
,其中N
被替换为描述要读入的缓冲区大小的整数。在OP的示例中,这将是%19s
,留出必要的“0”终止符。这样做可以避免潜在的缓冲区溢出。 - alkfgets()
或者甚至是read()
,并自己解析已输入的内容。 - alk