#include<stdio.h>
#include<string.h>
typedef struct date
{
int year;
int month;
int day;
}DATE;
typedef struct student
{
int num;
char name[20];
char sex;
DATE birthday;
float score;
}STUDENT;
int main()
{
void inputarr(STUDENT s[ ], int n);
void outputarr(STUDENT s[ ], int n);
int maxarr(STUDENT s[ ], int n);
STUDENT b[5];
int n;
inputarr(b,5);
n=maxarr(b,5);
outputarr(b,5);
printf("第%d个同学的成绩最高。\n",n+1);
return 0;
}
void inputarr(STUDENT s[ ], int n)
{
int i=0;
for(i=0;i<n;i++)
{
scanf("%d",&(s[i].num));
scanf("%s",s[i].name);
scanf("%s",&s[i].sex);
scanf("%d %d %d",&s[i].birthday.year,&s[i].birthday.month,&s[i].birthday.day);
scanf("%f",&s[i].score);
}
return 0;
}
int maxarr(STUDENT s[ ], int n)
{
int max,t,i;
max=0;
for(i=0;i<n;i++)
{
if(max<s[i].score)
{
max=s[i].score;
t=i;
}
}
return t;
}
void outputarr(STUDENT s[ ], int n)
{
int i;
for(i=0;i<n;i++)
{
printf("学号:%d\t",s[i].num);
printf("姓名:%s\t",s[i].name);
printf("性别:%s\t",s[i].sex);
printf("出生日期:%d-%d-%d\t",s[i].birthday.year,s[i].birthday.month,s[i].birthday.day);
printf("成绩:%0.1f\n",s[i].score);
}
return 0;
}
为什么代码正确但是没有结果?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 阿里嘎多学长 2024-05-15 22:38关注
以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:
您想要解决的问题
您提问的目的是解决C语言程序中“代码正确但是没有结果”的问题。这通常意味着程序没有按照预期执行,或者没有输出预期的结果。
问题出现原因
- scanf()函数的格式字符串和变量之间缺少空格:在
inputarr
函数中,scanf("%s",&s[i].sex);
应该改为scanf(" %c",&s[i].sex);
,因为sex
是一个字符变量,不需要&
操作符,且在格式字符串中应该有一个空格,以跳过前一个输入后的换行符。 - 返回类型不一致:在
inputarr
和outputarr
函数中,您使用了void
作为返回类型,但是在函数体的末尾使用了return 0;
。void
类型的函数不应该有返回值,所以return 0;
是多余的,并且可能会引起编译器警告。
问题解决方案
- 修改
inputarr
函数中对性别输入的处理。 - 移除
inputarr
和outputarr
函数中不必要的return 0;
语句。
提供代码
以下是修改后的代码:
#include<stdio.h> #include<string.h> typedef struct date { int year; int month; int day; }DATE; typedef struct student { int num; char name[20]; char sex; DATE birthday; float score; }STUDENT; int main() { void inputarr(STUDENT s[], int n); void outputarr(STUDENT s[], int n); int maxarr(STUDENT s[], int n); STUDENT b[5]; inputarr(b,5); int n = maxarr(b,5); // 这里应将n作为变量接收返回值 outputarr(b,5); printf("第%d个同学的成绩最高。\n",n+1); return 0; } void inputarr(STUDENT s[], int n) { int i; for(i=0; i<n; i++) { scanf("%d",&(s[i].num)); scanf("%s",s[i].name); scanf(" %c",&s[i].sex); // 修改这里 scanf("%d %d %d",&s[i].birthday.year,&s[i].birthday.month,&s[i].birthday.day); scanf("%f",&s[i].score); } // return 0; // 移除这一行 } int maxarr(STUDENT s[], int n) { int max,t,i; max=0; t=0; // 初始化t for(i=0; i<n; i++) { if(max < s[i].score) { max = s[i].score; t = i; } } return t; } void outputarr(STUDENT s[], int n) { int i; for(i=0; i<n; i++) { printf("学号:%d\t",s[i].num); printf("姓名:%s\t",s[i].name); printf("性别:%c\t",s[i].sex); // 修改这里 printf("出生日期:%d-%d-%d\t",s[i].birthday.year,s[i].birthday.month,s[i].birthday.day); printf("成绩:%0.1f\n",s[i].score); } // return 0; // 移除这一行 }
代码运行方式
- 将上述代码复制到C语言的编译器中。
- 编译并运行程序。
- 根据程序提示输入学生信息。
- 程序将输出每个学生的信息,并告知哪个学生的成绩最高。
代码预期运行结果
学号:1 姓名:张三 性别:男 出生日期:2001-01-01 成绩:90.0 学号:2 姓名:李四 性别:女 出生日期:2002-02-02 成绩:85.5 学号:3 姓名:王五 性别:男 出生日期:2003-03-03 成绩:92.0 学号:4 姓名:赵六 性别:女 出生日期:2004-04-04 成绩:88.5 学号:5 姓名:钱七 性别:男 出生日期:2005-05-05 成绩:91.0 第2个同学的成绩最高。
推荐相关链接
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录 - scanf()函数的格式字符串和变量之间缺少空格:在
悬赏问题
- ¥15 Mac版Fiddler Everywhere4.0.1提示强制更新
- ¥15 android 集成sentry上报时报错。
- ¥50 win10链接MySQL
- ¥35 跳过我的世界插件ip验证
- ¥15 抖音看过的视频,缓存在哪个文件
- ¥15 自定义损失函数报输入参数的数目不足
- ¥15 如果我想学习C大家有是的的资料吗
- ¥15 根据文件名称对文件进行排序
- ¥15 deploylinux的ubuntu系统无法成功安装使用MySQL❓
- ¥15 有人会用py或者r画这种图吗