我写了下面的程序,试图读取和打印结构的值。 我认为scanf忽略了除了char之外的所有kinf数据的/ n,但是当我运行下面的程序并将第一个输入作为整数提供时。我没有获得名称变量的o / p。为什么?
#include <stdio.h>
#include <string.h>
struct employee
{
int empno;
char name[10];
float p_money;
};
int main()
{
struct employee e;
struct employee *ptr;
ptr = &e;
printf("please enter the empno \n");
scanf("%d", &(ptr->empno));
printf("please enter the name \n");
gets(ptr->name);
//scanf("%d", &(ptr->empno));
printf("please enter the money \n");
scanf("%f", &(ptr->p_money));
printf("Roll No: %d\n", ptr->empno);
printf("Name: %s\n", ptr->name);
printf("Money: %f\n", ptr->p_money);
getchar();
return 0;
}
执行:
please enter the empno
10
please enter the name
please enter the money
100.99
Roll No:10 名称: 钱:100.989998
please enter the empno
10jackal
please enter the name
please enter the money
100.99
Roll No:10 姓名:豺狼 钱:100.989998
答案 0 :(得分:2)
问题不在于scanf
,而在于gets
- 而是使用fgets
。
char * gets(char * str);
gets - 从标准输入(stdin)读取字符并将它们作为C字符串存储到str中,直到到达换行符或文件结尾。
答案 1 :(得分:0)
1使用fgets
代替gets
... gets
不好。
gets
不好的原因:
gets
从标准输入中读取字符,直到按下enter
(遇到新行)。
在您的情况下,name[10]
,您正在gets(name)
。 gets
不知道name
有多大......如果输入9个字符,就可以了。
但如果输入超过9个字符怎么办? gets()
继续将所有char
写入不属于您的内存,从而导致“Undefined Behavior
”