为什么我的“获取”功能无法真正获得字符串?

时间:2014-01-06 20:10:55

标签: c string gets

我的问题看起来非常简单,我很抱歉要问这个代码有什么问题?!为什么只是跳过名字部分?!

#include <stdio.h>
#include <conio.h>
#include <string.h>
#define nl printf("\n")

struct date{int day,month,year;};
struct student{long int id;char name[30];struct date birthday;};

int main()
{
    struct student temp;
    nl;nl;printf("ID no:");scanf("%ld",&temp.id);nl;
    printf("Student name:");
    gets(temp.name);
    nl;nl;
    printf("Student birthday year:19");scanf("%d",&temp.birthday.year);nl;
    printf("Student birthday month");scanf("%d",&temp.birthday.month);nl;
    printf("Student birthday day");scanf("%d",&temp.birthday.day);nl;
    getch();        //for pause
    return 0;
}

获取功能有什么不对吗?!因为空间的事情我不想使用scanf("%s",) ...

2 个答案:

答案 0 :(得分:1)

这是因为它会读取\n留下的scanf字符。使用

int ch;
while((ch = getchar()) != '\n' && ch != EOF);  

消费\n

最好不要使用gets,因为它在数组绑定检查中失败。请改用fgets

答案 1 :(得分:0)

正如haccks所说,你不应该使用gets(),但如果你真的想在你的代码中使用它,请在id之前使用gets()。即在struct student temp;行之后,如果您想打印它,那么只需puts(temp.name)