鱼C论坛

 找回密码
 立即注册
查看: 1036|回复: 13

[已解决]不知道怎么的姓名输出不了

[复制链接]
发表于 2020-5-24 17:48:39 | 显示全部楼层 |阅读模式

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

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

x
#include<stdio.h>
#include<string.h>
struct student
{
char no[10];//学号
char name[10];//姓名
int age;//年龄
char number[11];//电话
float score;//分数
};
int main()
{
student a;
a.age=18;
a.score=90;
printf("请输入a学生的姓名: ");
scanf("%s",a.name);
getchar();
printf("请输入a学生的电话:");
gets(a.number);
strcpy(a.no,"2019240010");
   
printf("\n\na同学的信息如下: \n学号:%s \n姓名: %s \n年龄:%d \n 电话:%s \n分数:%.1f\n",
                                      a.no,a.name  ,a.age,a.number,a.score);
return 0;
}
最佳答案
2020-5-24 19:24:36
晨蒙蒙 发表于 2020-5-24 19:09
我刚才听你的改了一下,感觉是因为学号与名字全是char型导致的。可是把学号改成int型又出问题了
#includ ...

就是三楼说的strcpy,10位,实际最后一位'\0'写到name里去了,导致输入"name",成了"\0ame\0"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-24 18:09:40 | 显示全部楼层
这两行
printf("\n\na同学的信息如下: \n学号:%s \n姓名: %s \n年龄:%d \n 电话:%s \n分数:%.1f\n",
                                      a.no,a.name  ,a.age,a.number,a.score);
为什么放在了两行?

要是放在两行的话要这样:
printf("\n\na同学的信息如下: \n学号:%s \n姓名: %s \n年龄:%d \n 电话:%s \n分数:%.1f\n",\
a.no,a.name  ,a.age,a.number,a.score);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-24 18:14:19 | 显示全部楼层
KevinHu 发表于 2020-5-24 18:09
这两行
为什么放在了两行?

不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-24 18:22:44 | 显示全部楼层
a.no 在使用 strcpy 时缓冲区溢出。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-24 18:24:37 | 显示全部楼层
#include<stdio.h>
#include<string.h>
struct student
{
char no[10];//学号
char name[10];//姓名
char age[11];//年龄
char number[11];//电话
float score;//分数
};
int main()
{
student a;
a.age=18;
a.score=90;
printf("请输入a学生的姓名: ");
scanf("%s",a.name);
getchar();
printf("请输入a学生的电话:");
gets(a.number);
strcpy(a.no,"2019240010");
   
printf("\n\na同学的信息如下: \n学号:%s \n姓名: %s \n年龄:%d \n 电话:%s \n分数:%.1f\n",
                                      a.no,a.name  ,a.age,a.number,a.score);
return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-24 18:24:56 | 显示全部楼层
KevinHu 发表于 2020-5-24 18:09
这两行
为什么放在了两行?

我非常的确定,他写的没错。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-24 18:49:47 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-5-24 18:22
a.no 在使用 strcpy 时缓冲区溢出。

可是学号最后可以输出,这个溢出和姓名有什么关系吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-24 18:54:06 | 显示全部楼层
KevinHu 发表于 2020-5-24 18:09
这两行
为什么放在了两行?

我改成你这样还是出现之前的问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-24 19:09:17 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-5-24 18:22
a.no 在使用 strcpy 时缓冲区溢出。

我刚才听你的改了一下,感觉是因为学号与名字全是char型导致的。可是把学号改成int型又出问题了
#include<stdio.h>
#include<string.h>
struct student
{
int no[10];//学号
char name[10];//姓名
int age;//年龄
char number[11];//电话
float score;//分数
};
int main()
{
student a;
a.age=18;
a.score=90;
printf("请输入a学生的姓名: ");
scanf("%s",a.name);
getchar();
printf("请输入a学生的电话:");
gets(a.number);
printf("请输入a学生的学号:");
scanf("%d",a.no);
printf("\n\na同学的信息如下: \n学号:%s \n姓名: %s \n年龄:%d \n 电话:%s \n分数:%.1f\n",
                                      a.no,a.name  ,a.age,a.number,a.score);
return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-24 19:17:56 | 显示全部楼层
KevinHu 发表于 2020-5-24 18:09
这两行
为什么放在了两行?

我觉得不需要……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-24 19:24:36 | 显示全部楼层    本楼为最佳答案   
晨蒙蒙 发表于 2020-5-24 19:09
我刚才听你的改了一下,感觉是因为学号与名字全是char型导致的。可是把学号改成int型又出问题了
#includ ...

就是三楼说的strcpy,10位,实际最后一位'\0'写到name里去了,导致输入"name",成了"\0ame\0"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-24 19:31:06 | 显示全部楼层
如楼上所说。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-24 19:39:35 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-24 19:40:49 | 显示全部楼层
java2python 发表于 2020-5-24 19:24
就是三楼说的strcpy,10位,实际最后一位'\0'写到name里去了,导致输入"name",成了"\0ame\0"

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-14 02:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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