Destiny_ing 2024-05-15 22:38 采纳率: 71%
浏览 4
已结题

为什么代码正确但是没有结果?


#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;
}




  • 写回答

2条回答 默认 最新

  • 阿里嘎多学长 2024-05-15 22:38
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    您想要解决的问题

    您提问的目的是解决C语言程序中“代码正确但是没有结果”的问题。这通常意味着程序没有按照预期执行,或者没有输出预期的结果。

    问题出现原因

    1. scanf()函数的格式字符串和变量之间缺少空格:在inputarr函数中,scanf("%s",&s[i].sex); 应该改为 scanf(" %c",&s[i].sex);,因为sex是一个字符变量,不需要&操作符,且在格式字符串中应该有一个空格,以跳过前一个输入后的换行符。
    2. 返回类型不一致:在inputarroutputarr函数中,您使用了void作为返回类型,但是在函数体的末尾使用了return 0;void类型的函数不应该有返回值,所以return 0;是多余的,并且可能会引起编译器警告。

    问题解决方案

    • 修改inputarr函数中对性别输入的处理。
    • 移除inputarroutputarr函数中不必要的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个同学的成绩最高。
    

    推荐相关链接

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月29日
  • 已采纳回答 5月22日
  • 创建了问题 5月15日

悬赏问题

  • ¥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画这种图吗