liyifeng295641 发表于 2024-4-11 10:07:25

C语言 结构体输出问题

#include <stdio.h>
#include <string.h>

struct Student
{
        int id;
        int sex;
        char name;
        char qq;
        char email;
};

int main(void)
{
        struct Student stu;
        char sex;
        char ch;

        printf("请输入学生的ID:");
        scanf("%d", &stu.id);

        printf("请输入学生的性别:");
        scanf("%d", &stu.sex);

        printf("请输入学生的名字:");
        scanf("%s", stu.name);

        printf("请输入学生的QQ:");
        scanf("%s", stu.qq);

        printf("请输入学生的Email:");
        scanf("%s", stu.email);

        printf("=====学生信息录入完毕=====\n");

        printf("当前结构体的变量是:\n");
        printf("学生的ID:%d\n", stu.id);
        printf("学生的性别:%s\n", ((stu.sex == 1) ? "男" : "女"));
        printf("学生的名字:%s\n", stu.name);
        printf("学生的QQ是:%s\n", stu.qq);
        printf("学生的Email是:%s\n", stu.email);

        return 0;
}

输入:

请输入学生的ID:110
请输入学生的性别:1
请输入学生的名字:chenxing
请输入学生的QQ:3548643569
请输入学生的Email:yl295641@gmail.com
=====学生信息录入完毕=====
当前结构体的变量是:
学生的ID:110
学生的性别:男
学生的名字:chenx3548643569yl295641@gmail.com
学生的QQ是:3548643569yl295641@gmail.com
学生的Email是:yl295641@gmail.com

为什么name,qq,email是连续输出的?@FishC

FishC 发表于 2024-4-11 10:07:43

这是因为在输入名字、QQ和Email时,您使用了scanf函数来读取字符串,而scanf函数会将输入的字符串以空格或换行符分隔开来。因此,如果输入的名字、QQ或Email中包含空格,则scanf函数会将其分割成多个部分。

要解决这个问题,您可以使用fgets函数来读取字符串。fgets函数可以读取包含空格的字符串,并且它会将输入的换行符一起存储在字符串中,因此需要注意清除换行符。

您可以将以下代码替换掉原来的输入部分:

printf("请输入学生的ID:");
scanf("%d", &stu.id);

printf("请输入学生的性别:");
scanf("%d", &stu.sex);

printf("请输入学生的名字:");
getchar();// 清除上一个输入的换行符
fgets(stu.name, sizeof(stu.name), stdin);
stu.name = '\0';// 清除末尾的换行符

printf("请输入学生的QQ:");
fgets(stu.qq, sizeof(stu.qq), stdin);
stu.qq = '\0';

printf("请输入学生的Email:");
fgets(stu.email, sizeof(stu.email), stdin);
stu.email = '\0';

printf("=====学生信息录入完毕=====\n");

这样修改后,您再次运行程序,就会得到正确的输出结果了。希望对您有帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

liyifeng295641 发表于 2024-4-11 10:25:24

FishC 发表于 2024-4-11 10:07
这是因为在输入名字、QQ和Email时,您使用了scanf函数来读取字符串,而scanf函数会将输入的字符串以空格或 ...

你没有解决我的问题。。。

FishC 发表于 2024-4-11 10:25:57

liyifeng295641 发表于 2024-04-11 10:25
你没有解决我的问题。。。

非常抱歉没有解决您的问题。如果你希望在输出姓名、QQ和Email时,它们不连续输出,可以使用数组来存储这些信息,而不是使用字符变量。这样,您就可以在结构体中定义一个字符数组来存储姓名、QQ和Email,而不是用单个字符变量。以下是修改后的代码:

#include <stdio.h>

struct Student{
    int id;
    int sex;
    char name;
    char qq;
    char email;
};

int main(void){
    struct Student stu;
   
    printf("请输入学生的ID:");
    scanf("%d", &stu.id);
   
    printf("请输入学生的性别:");
    scanf("%d", &stu.sex);
   
    printf("请输入学生的名字:");
    scanf("%s", stu.name);
   
    printf("请输入学生的QQ:");
    scanf("%s", stu.qq);
   
    printf("请输入学生的Email:");
    scanf("%s", stu.email);
   
    printf("=====学生信息录入完毕=====\n");
    printf("当前结构体的变量是:\n");
    printf("学生的ID:%d\n", stu.id);
    printf("学生的性别:%s\n", (stu.sex == 1) ? "男" : "女");
    printf("学生的名字:%s\n", stu.name);
    printf("学生的QQ是:%s\n", stu.qq);
    printf("学生的Email是:%s\n", stu.email);
   
    return 0;
}

这样修改后,name、qq和email就能够正常输出了。希望这次能够解决您的问题!如果还有其他疑问,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

jrhppk 发表于 2024-4-11 18:29:05

你的 print 后面为什么会加个f ?

中英文泡椒 发表于 2024-4-11 18:43:15

jrhppk 发表于 2024-4-11 18:29
你的 print 后面为什么会加个f ?

因为是C语言的,不是python

jrhppk 发表于 2024-4-12 18:45:07

中英文泡椒 发表于 2024-4-11 18:43
因为是C语言的,不是python

哦哦。 见笑了{:5_109:}

中英文泡椒 发表于 2024-4-12 18:53:12

jrhppk 发表于 2024-4-12 18:45
哦哦。 见笑了

都是新手,一起加油{:5_109:}
页: [1]
查看完整版本: C语言 结构体输出问题