鱼C论坛

 找回密码
 立即注册
查看: 1789|回复: 7

[已解决]C语言 结构体输出问题

[复制链接]
发表于 2024-4-11 10:07:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <stdio.h>
  2. #include <string.h>

  3. struct Student
  4. {
  5.         int id;
  6.         int sex;
  7.         char name[5];
  8.         char qq[10];
  9.         char email[20];
  10. };

  11. int main(void)
  12. {
  13.         struct Student stu;
  14.         char sex[4];
  15.         char ch;

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

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

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

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

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

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

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

  33.         return 0;
  34. }
复制代码


输入:

请输入学生的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
最佳答案
2024-4-11 10:25:57
liyifeng295641 发表于 2024-04-11 10:25
你没有解决我的问题。。。


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

  1. #include <stdio.h>

  2. struct Student{
  3.     int id;
  4.     int sex;
  5.     char name[20];
  6.     char qq[20];
  7.     char email[30];
  8. };

  9. int main(void){
  10.     struct Student stu;
  11.    
  12.     printf("请输入学生的ID:");
  13.     scanf("%d", &stu.id);
  14.    
  15.     printf("请输入学生的性别:");
  16.     scanf("%d", &stu.sex);
  17.    
  18.     printf("请输入学生的名字:");
  19.     scanf("%s", stu.name);
  20.    
  21.     printf("请输入学生的QQ:");
  22.     scanf("%s", stu.qq);
  23.    
  24.     printf("请输入学生的Email:");
  25.     scanf("%s", stu.email);
  26.    
  27.     printf("=====学生信息录入完毕=====\n");
  28.     printf("当前结构体的变量是:\n");
  29.     printf("学生的ID:%d\n", stu.id);
  30.     printf("学生的性别:%s\n", (stu.sex == 1) ? "男" : "女");
  31.     printf("学生的名字:%s\n", stu.name);
  32.     printf("学生的QQ是:%s\n", stu.qq);
  33.     printf("学生的Email是:%s\n", stu.email);
  34.    
  35.     return 0;
  36. }
复制代码


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-4-11 10:07:43 | 显示全部楼层
这是因为在输入名字、QQ和Email时,您使用了scanf函数来读取字符串,而scanf函数会将输入的字符串以空格或换行符分隔开来。因此,如果输入的名字、QQ或Email中包含空格,则scanf函数会将其分割成多个部分。

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

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

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

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

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

  9. printf("请输入学生的QQ:");
  10. fgets(stu.qq, sizeof(stu.qq), stdin);
  11. stu.qq[strlen(stu.qq) - 1] = '\0';

  12. printf("请输入学生的Email:");
  13. fgets(stu.email, sizeof(stu.email), stdin);
  14. stu.email[strlen(stu.email) - 1] = '\0';

  15. printf("=====学生信息录入完毕=====\n");
复制代码


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

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

你没有解决我的问题。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-11 10:25:57 | 显示全部楼层    本楼为最佳答案   
liyifeng295641 发表于 2024-04-11 10:25
你没有解决我的问题。。。


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

  1. #include <stdio.h>

  2. struct Student{
  3.     int id;
  4.     int sex;
  5.     char name[20];
  6.     char qq[20];
  7.     char email[30];
  8. };

  9. int main(void){
  10.     struct Student stu;
  11.    
  12.     printf("请输入学生的ID:");
  13.     scanf("%d", &stu.id);
  14.    
  15.     printf("请输入学生的性别:");
  16.     scanf("%d", &stu.sex);
  17.    
  18.     printf("请输入学生的名字:");
  19.     scanf("%s", stu.name);
  20.    
  21.     printf("请输入学生的QQ:");
  22.     scanf("%s", stu.qq);
  23.    
  24.     printf("请输入学生的Email:");
  25.     scanf("%s", stu.email);
  26.    
  27.     printf("=====学生信息录入完毕=====\n");
  28.     printf("当前结构体的变量是:\n");
  29.     printf("学生的ID:%d\n", stu.id);
  30.     printf("学生的性别:%s\n", (stu.sex == 1) ? "男" : "女");
  31.     printf("学生的名字:%s\n", stu.name);
  32.     printf("学生的QQ是:%s\n", stu.qq);
  33.     printf("学生的Email是:%s\n", stu.email);
  34.    
  35.     return 0;
  36. }
复制代码


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-11 18:29:05 | 显示全部楼层
你的 print 后面为什么会加个f ?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-11 18:43:15 | 显示全部楼层
jrhppk 发表于 2024-4-11 18:29
你的 print 后面为什么会加个f ?

因为是C语言的,不是python
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-12 18:45:07 | 显示全部楼层
中英文泡椒 发表于 2024-4-11 18:43
因为是C语言的,不是python

哦哦。 见笑了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-12 18:53:12 | 显示全部楼层

都是新手,一起加油
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-10 14:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表