scanf("%s,%d", p1->name, p1->age)无法接受age的值

来源:5-2 Linux C 动态数据结构-动态链表

正确答案选C

2019-12-15 12:39

struct Student {
    char name[30];
    int age;
    struct Student *next;
};

struct Student *createStudent() {
    struct Student *head;
    struct Student *p1, *p2;

    int n = 0;
    head = NULL;
    p1 = p2 = (struct Student *) malloc(sizeof(struct Student));
    scanf("%s,%d", p1->name, &p1->age);
//    //分开输入就没有问题
//    scanf("%s", p1->name);
//    scanf("%d", &p1->age);
    while (p1->age != 0) {
        n++;
        if (n == 1) head = p1;
        else p2->next = p1;

        p2 = p1;
        p1 = (struct Student *) malloc(sizeof(struct Student));
        scanf("%s,%d", p1->name, &p1->age);
//    //分开输入就没有问题
//      scanf("%s", p1->name);
//      scanf("%d", &p1->age);
    }
    //使得末尾指向NULL
    p2->next = NULL;
    return (head);
}

int main() {

    struct Student *student;
    student = createStudent();

    printf("%s,%d", student->name, student->age);

    return 0;
}

老师的结构体内是都是 int,我试了,都是int ,scanf("%d,%d", p1->gender, p1->age)可以接受2个值,但是一个char[] 一个int 就第二个值接受不到 scanf("%s [这里不要逗号] %d", p1->name, p1->age) 这样却可以接受,好奇奇怪。求解

写回答 关注

1回答

  • 我是没有昵称
    2019-12-21 15:57:51

    因为scanf在输入字符串的时候,是用空格或者回车表示结束,如果这里用逗号,scanf就会认为这个字符串还没输入完成(认为逗号也是字符串的内容)

Linux C语言结构体

C语言的深入,帮助小伙伴们进一步的理解C语言,赶紧看过来

118294 学习 · 162 问题

查看课程

相似问题