猪猪虾 发表于 2020-12-19 11:54:53

显示结构体未定义,107行

#include<winuser.inl>
#include<stdio.h>
#include <cstdlib>
#include<string.h>
struct Student getInput(struct Student stu);
void printinformation(struct Student stu);

//用比较计数法对结构体的num字段进行排序
struct Student
{
        int num;
        char name;
        float score;
}stu;

struct Student getInput(struct Student stu)
{
        printf("enter the number of student:");
        scanf_s("%d", &stu.num);

        printf("enter the name of student:");
        scanf_s("%s", stu.name);

        printf("enter the score of student:");
        scanf_s("%f", &stu.score);

        return stu;
}

void printinformation(struct Student stu)
{
        printf("title: %d\n", stu.num);
        printf("author: %s\n", stu.name);
        printf("price: %f\n", stu.score);
}

//************************************计数排序******************************************
int numbers_of_people = 3;
//找出待排序的数组中最大(最小)的元素
//统计数组中每个值为 i 的元素出现的次数,存入数组 C 的第 i 项
//对所有的计数累加(从 C 中的第一个元素开始,每一项和前一项相加)
//反向填充目标数组:将每个元素 i 放在新数组的第 C(i) 项,每放一个元素就将 C(i) 减去 1
int* sort(int array[])
{

        int min_num, max_num;
        min_num = array;
        max_num = array;
        //找出待排序的数组中最大(最小)的元素
        //找最小最大
        for (int j = 1; j < numbers_of_people; j++)
        {
                if (min_num > array)
                {
                        min_num = array;
                }

                if (max_num < array)
                {
                        max_num = array;
                }
        }

        //统计数组中每个值为 i 的元素出现的次数,存入数组 C 的第 i 项
        int* counter;
        int counter_length = max_num - min_num + 1;
        counter = new int;

        int count_min = min_num;
        for (int i = 0; i <= max_num; i++)//记录counter的位置
        {
                counter = 0;
                for (int j = 0; j < numbers_of_people; j++)
                {
                        if (i == array)
                        {
                                counter ++;
                        }
                }
                count_min++;
        }

        //对所有的计数累加(从 C 中的第一个元素开始,每一项和前一项相加),这里是用于判断有几个数?
        //反向填充目标数组:将每个元素 i 放在新数组的第 C(i) 项,每放一个元素就将 C(i) 减去 1
        //新数组的长度肯定是已经确定的,计数数组逐个读取
        int* new_array;
        new_array = new int;
        count_min = min_num;
        int i = 0, j = 0, array_position = 0;
        for (int i = 0; i <= max_num; i++)//记录counter的位置
        {
                if (counter != 0)
                {
                        do
                        {
                                new_array = i; //count第i个位置存放的是array中值 == i的个数
                                counter --;
                                array_position++;
                        } while (counter != 0);
                }
        }
        return new_array;
}

int main()
{
        struct Student b1, b2, b3;//给 Book结构体定义两个结构体变量
        int array;   //获取三个人的Num字段,并将其存入一个数组,对数组进行排序,而后按照排序后的结果进行输出
        int i = 0;

        printf("enter the information of the first student...\n");
        b1 = getInput(b1); //定义了 getInput函数接收输入,将获得的值赋值给空的结构体变量b1
        array = b1.num;
        printf("\n");

        printf("enter the information of the second student...\n");
        b2 = getInput(b2); //定义了 getInput函数接收输入,将获得的值赋值给空的结构体变量b1
        i++;
        array = b2.num;
        printf("\n");

        printf("enter the information of the third student...\n");
        b3 = getInput(b3); //定义了 getInput函数接收输入,将获得的值赋值给空的结构体变量b1
        i++;
        array = b3.num;
        printf("\n");

        printf("\n\n录入完毕,现在开始打印。。。");
        printf("打印第一个人的信息。。。");
        printinformation(b1);
        printf("\n");
        printf("打印第二个人的信息。。。");
        printinformation(b2);
        printf("\n");
        printf("打印第三个人的信息。。。");
        printinformation(b3);

        int* sort_array;
        sort_array = sort(array);
        printf("三个人num的是:");
        for (int i = 0; i < numbers_of_people; i++)//记录counter的位置
        {
                printf("%d ", array);
        }
        printf("\n");

        printf("三个人num按照大小排序是:");
        for (int i = 0; i < numbers_of_people; i++)//记录counter的位置
        {
                printf("%d ", sort_array);
        }

        return 0;
}

jackz007 发表于 2020-12-19 12:09:48

本帖最后由 jackz007 于 2020-12-19 12:19 编辑

      第一行
#include<winuser.inl>
      这都不报错?
      编译器给出的错误信息是 b1、b2 、b3 未初始化,并不是变量未定义,意思是在赋值前访问了变量。
      解决方法,必须修改函数 getInput() 的定义
void getInput(struct Student * stu)
{
      printf("enter the number of student:");
      scanf_s("%d", & stu -> num)         ;

      printf("enter the name of student:");
      scanf_s("%s", stu -> name , 20)       ;

      printf("enter the score of student:") ;
      scanf_s("%f", & stu -> score)         ;
}
   调用:
      getInput(& b1)                        ;
页: [1]
查看完整版本: 显示结构体未定义,107行