WFR 发表于 2020-4-8 10:15:40

求解决一直得不到正确的结果

//学生信息包括学号和成绩2项,请从键盘敲入4个学生的信息,然后在自定义函数中计算该四名学生中成绩最高的学生信息,输出结果。
#include<stdio.h>
struct student
{
        char name;
        int number;
}str;
main()
{       
        int i;
        printf("请输入学生的姓名和成绩:");
        for (i = 0; i < 4; i++)
                scanf("%s%d", str.name, &str.number);
        printf("学生中成绩最高的是%d", max(str.number));
}
int max(int a)
{
        int i,temp=a;
        for (i = 1; i < 4;i++)
        if (a>temp)
                temp = a;
        return temp;
}//程序里没有错误,可是得不到正确的结果
只能输入没有输出

howzyao 发表于 2020-4-8 10:26:58

max函数怎么不声明?

howzyao 发表于 2020-4-8 10:27:53

我想,声明时,参数应当是一个学生呢?还是一个整型值呢?还是一个整型指针呢?请思考。

howzyao 发表于 2020-4-8 10:29:24

待我回去上机,按你所写,重写出你一眼能看到的问题所在。

WFR 发表于 2020-4-8 10:31:21

howzyao 发表于 2020-4-8 10:27
我想,声明时,参数应当是一个学生呢?还是一个整型值呢?还是一个整型指针呢?请思考。

声明的意义在那里????

sunrise085 发表于 2020-4-8 10:35:35

这么多错误,你说程序没错?
你的程序通过编译了?运行的时候没有提示错误?
printf("学生中成绩最高的是%d", max(str.number))
//这里的str.number是什么鬼?
//1.经过for循环之后i不是已经等于4了么?str没有超出index范围?
//2.max函数的参数是一个int数组,你传递进去一个int变量是什么意思?
//3.max函数定义在main函数之后,你不在前面进行函数声明,程序能运行?难道没有提示:error: ‘max’ was not declared in this scope
帮你修改了。
#include<stdio.h>
int max(int a);
struct student
{
    char name;
    int number;
}str;
main()
{      
    int i,chengji;
    printf("请输入学生的姓名和成绩:");
    for (i = 0; i < 4; i++){
      scanf("%s%d", str.name, &str.number);
      chengji=str.number;
      
    }
    printf("学生中成绩最高的是%d",max(chengji));
}
int max(int a)
{
    int i,temp=a;
    for (i = 1; i < 4;i++)
    if (a>temp)
      temp = a;
    return temp;
}

WFR 发表于 2020-4-8 10:37:06

sunrise085 发表于 2020-4-8 10:35
这么多错误,你说程序没错?
你的程序通过编译了?运行的时候没有提示错误?



运行的时候没有报错

WFR 发表于 2020-4-8 10:38:08

sunrise085 发表于 2020-4-8 10:35
这么多错误,你说程序没错?
你的程序通过编译了?运行的时候没有提示错误?



求带,求教

sunrise085 发表于 2020-4-8 10:39:00

另外,还要提一句。很多程序猿都会犯的一个错误。
“我的程序没有错误啊”
若果完全没有错误,那不就运行出结果了么
自信是要有的,但不是盲目的自信。
个人建议:以后提问尽量别用这一句话
不喜轻喷~~

sunrise085 发表于 2020-4-8 10:40:58

WFR 发表于 2020-4-8 10:37
运行的时候没有报错

这么多问题,运行的时候没有报错?
那你应该换一个编译器了。哈哈哈哈,你的编译器在玩你

WFR 发表于 2020-4-8 10:43:44

sunrise085 发表于 2020-4-8 10:35
这么多错误,你说程序没错?
你的程序通过编译了?运行的时候没有提示错误?



chengji=str.number;为什么要再建一个数组呢????为什么不能直接调用结构体中的数据????

WFR 发表于 2020-4-8 10:50:24

sunrise085 发表于 2020-4-8 10:39
另外,还要提一句。很多程序猿都会犯的一个错误。
“我的程序没有错误啊”
若果完全没有错误,那不就运行 ...

嗯!!!!!!好的谢谢你,我是一个新手,还在自学的路上{:10_266:}

WFR 发表于 2020-4-8 10:51:30

sunrise085 发表于 2020-4-8 10:40
这么多问题,运行的时候没有报错?
那你应该换一个编译器了。哈哈哈哈,你的编译器在玩你

{:10_266:}{:10_277:}{:10_266:}

sunrise085 发表于 2020-4-8 10:53:42

WFR 发表于 2020-4-8 10:43
chengji=str.number;为什么要再建一个数组呢????为什么不能直接调用结构体中的数据????

你写的max函数的参数是int类型的数组。str的是struct类型数组,不能用;str[i].number是int变量不是数组,而且你不能传递进气四个int变量吧。

倒是可以修改max函数,直接将struct数组传递进去
#include<stdio.h>
struct student
{
    char name;
    int number;
}str;
int max(student a);

int main()
{      
    int i,chengji;
    printf("请输入学生的姓名和成绩:");
    for (i = 0; i < 4; i++)
      scanf("%s%d", str.name, &str.number);
    printf("学生中成绩最高的是%d",max(str));
}
int max(student a)
{
    int i,temp=a.number;
    for (i = 1; i < 4;i++)
    if (a.number>temp)
      temp = a.number;
    return temp;
}

WFR 发表于 2020-4-8 10:57:29

sunrise085 发表于 2020-4-8 10:53
你写的max函数的参数是int类型的数组。str的是struct类型数组,不能用;str[i].number是int变量不是数组 ...

喔!!!谢谢你告诉我,我都不知道这个,我该从哪里去找这些东西

howzyao 发表于 2020-4-8 16:18:18

啊.我晚来一步了?竟然有最佳答案了啊?{:10_266:}

howzyao 发表于 2020-4-8 17:16:42

#include <cstdlib>
#include <iostream>
#include <stdio.h>
using namespace std;

struct student
{
      char name;
                  
      int number;
      

      
      double sc;
      int    thenumber;
      double scdump;
         
//}str;

};

double max(const student &,const double);
                     
                     
int main(int argc, char *argv[])
{

   
    int len=4; //需要4位学生
   
    double higher=0.0;
      
    cout<<"请输入学生的姓名和成绩:"<<endl;
   
    student persons[ len ];
   
    for(int i=0;i<len;i++)
    {
      cout<<"输入第"<<i+1<<"位学生的姓名(回车键确认)"<<endl;   
      cin>>persons.name;
      cout<<"输入"<<persons.name<<"的成绩(回车键确认)"<<endl;
      cin>>persons.sc;
      cin.get();
      
      
                     
      if(!i)
      higher=persons.sc;
      else
      higher = max( persons,higher );
      
    }
    cout<<"成绩最高的得分是:"<<higher<<endl;
   
    //准备工作,作完了,开始需求计算:
    //平均成绩:
               //average( persons ); //为了熟悉C++这个工具,留给你自己完成


   
    system("PAUSE");
    return EXIT_SUCCESS;
}

double max( const student &a,double h)
{
      return a.sc>h? a.sc : h;
      
}//程序里没有错误,可是得不到正确的结果
   

howzyao 发表于 2020-4-8 17:25:45

虽然没有拿到最佳答案,但还是要方便交流,下面是,逐行的注释及改编思路:

#include <cstdlib>
#include <iostream>
#include <stdio.h>
using namespace std;

struct student
{
      char name; //学该是5字符长度的char字符串组成的数组,意思就是名字不得超
                     //过2.5个中文长度,英文不得超过5个字符
      int number; //应该是学号
      
      //所以,没有存储成绩的 数据成员
      
      double sc; //新建一个存成绩的,成绩会有0.5分的
      
      //有计划,但暂时未用到的,比如不用每次都排名,记得排名的 数据成员
      //不去专门使用外部变量,直接使用这个学生类(结构)中的前一位学生的成绩
      int    thenumber; //也新建一个用来排名次的整型变量,名次不会有1.5名的
      double scdump; //新建一个,需要比对成绩的变量,用来和上一位学生的成绩相比
         
//}str;//虽说正确,我觉得不要这种写法,应当去主函数里使用时声明,要多少就声明多少

};

double max(const student &,const double); //既然主函数中有函数调用
                     //那就必须先要声明这个函数
                     //参数列表改你的int数组为一个"学生"
                     
int main(int argc, char *argv[])
{
    /*
      int i;
      printf("请输入学生的姓名和成绩:");
      for (i = 0; i < 4; i++)
               scanf("%s%d", str.name, &str.number);
      printf("学生中成绩最高的是%d", max(str.number));
    */
   
    int len=4; //需要4位学生
   
    double higher=0.0;//用于临时记录更高一些的成绩
    //同样是声明完毕后,及时初始化的习惯.
      
    cout<<"请输入学生的姓名和成绩:"<<endl;
   
    student persons[ len ]; //声明一个学生类型的变量:
            //取名 个人们 且以数组存在,长度是4
   
    for(int i=0;i<len;i++) //开始输入了
    {
      cout<<"输入第"<<i+1<<"位学生的姓名(回车键确认)"<<endl;   
      cin>>persons.name;
      cout<<"输入"<<persons.name<<"的成绩(回车键确认)"<<endl;
      cin>>persons.sc;
      cin.get();
      
      //计算最好成绩: 在输入的过程中
                     
      if(!i) //当第0个学生时,执行分支如下行:
      higher=persons.sc; //备份首个学生的成绩,随后就不执行本行
      else
      higher = max( persons,higher );
      
      //这个if else 分支,完成了最好成绩的排序:
      //按顺序备份出来刚刚输入并存好的成绩
      //第二个学生起直到最后一个,需要做:每次对比第前一次的成绩:
      
    }
    cout<<"成绩最高的得分是:"<<higher<<endl;
   
    //准备工作,作完了,开始需求计算:
    //平均成绩:
               //average( persons ); //为了熟悉C++这个工具,留给你自己完成


   
    system("PAUSE");
    return EXIT_SUCCESS;
}

double max( const student &a,double h) //实现: 形参 的名称是a,我称呼它为学生a
                                  //学生a是现有的,不能变动一切属性所以用const
                                  //增加一个对比的临时变量也是const的,不能变
{
      /*
      
      int i,temp=a;
      for (i = 1; i < 4;i++)
      if (a>temp)
                temp = a;
      return temp;

      max是无意义的,也帮你改一改:
      既然学生都进入来了,那就需要返回这个学生的成绩,只为是有一个学生进来,
      所以作为函数名:max就是无义意的,如何得到最大数嘛?
         
      */

      
      
      return a.sc>h? a.sc : h;
      
}//程序里没有错误,可是得不到正确的结果
   

howzyao 发表于 2020-4-8 17:38:22

声明的意义在那里????

这个义意有两条:
一,是C++的规则:凡是自定义函数,必先声明,再使用;
二,是你给出的函数名名称的涵意:最大的英文单词:max
跟据这个词,上帖已给作出来答案:你无论输出多少位学生名字,和成绩,它们都是宝贵的数据,这些数据,都存储在了你定义的学生类(结构中),
这些,都可以写入文件或数据库,总之,这些数据,需要一次录入,可靠存放,啊扯远了...
所以函数的意义,在于如何使用原始数据及原始数据的复件.
以上意义,对否?欢迎跟贴.
页: [1]
查看完整版本: 求解决一直得不到正确的结果