【问题标题】:I want to write a program to calculate the result of a student by using the structure and print the position我想编写一个程序来使用结构计算学生的结果并打印位置
【发布时间】:2021-10-29 12:16:04
【问题描述】:

在这个程序中,我想使用结构获取学生信息并打印位置。而在测验部分,只有最好的一个会计入三分之二。现在,当我运行程序时,它不需要任何输入。它只询问学生的数量,然后它终止并且不接受任何其他输入。谁能找出我的问题所在。

struct student_profile
{
    char name[100];
    int ID[100];
    int Final;
    int mid;
    int attendance;
    int assignment;
    int quiz1;
    int quiz2;
    int quiz3;
} s[100];


int comparison(int quiz1, int quiz2, int quiz3, int quiz_best)
{
    if (quiz1>quiz2 && quiz1>quiz3)
    {
        printf("Best quiz mark is: \n",quiz1);
        quiz_best = quiz1;
    }
    else if (quiz2>quiz1 && quiz2>quiz3)
    {
        printf("Best quiz mark is: \n",quiz2);
        quiz_best = quiz2;
    }
    else
        printf("Best quiz mark is: \n",quiz3);
        quiz_best = quiz3;

    return quiz_best;
}


int main()
{
    struct student_profile;
    int i,n,quiz_best;
    printf("Number of the student: \n");
    scanf("%d",&n);
    for(i=0,i<n; i++;)
    {
        printf("\nStudent No: %d\n",i);
        printf("Name: ");
        scanf("%d", &s[i].name);
        printf("ID: ");
        scanf("%d",&s[i].ID);
        printf("Final: ");
        scanf("%d",&s[i].Final);
        printf("mid: ");
        scanf("%d",&s[i].mid);
        printf("attendance: ");
        scanf("%d",&s[i].attendance);
        printf("assignment: ");
        scanf("%d",&s[i].assignment);
        printf("quiz1: ");
        scanf("%d",&s[i].quiz1);
        printf("quiz2: ");
        scanf("%d",&s[i].quiz2);
        printf("quiz3: ");
        scanf("%d",&s[i].quiz3);

        printf("\n Students Informations \n");

        for(i=0,i<n; i++;)
        {
            printf("\nStudent No: %d\n",i);
            printf("\nName: %s\n",s[i].name);
            printf("\nID: %d\n",s[i].ID);
            printf("\nFinal: %d\n",s[i].Final);
            printf("\nmid: %d\n",s[i].mid);
            printf("\nattendance: %d\n",s[i].attendance);
            printf("\nassignment: %d\n",s[i].assignment);
            printf("\nquiz1: %d\n",s[i].quiz1);
            printf("\nquiz2: %d\n",s[i].quiz2);
            printf("\nquiz3: %d\n",s[i].quiz3);
            printf("\nThe best quiz mark is: ",quiz_best);
            comparison(s[i].quiz1,s[i].quiz2,s[i].quiz3,quiz_best);
        }

    }
} ```

【问题讨论】:

  • 启用编译器警告。这将捕获多个问题供您解决。

标签: c structure


【解决方案1】:

你的 if 有问题

for(i=0,i<n; i++;)

应该是

for(i=0;i<n; i++)

这解决了你的实际问题。

为避免这种麻烦,请使用使编译器更严格的标志进行编译。使用 gcc/clang,例如有 -Wall -Wextra -Werror

【讨论】:

    【解决方案2】:

    你的代码有很多问题:

    • 中缺少大括号:

      else
          printf("Best quiz mark is: \n", quiz3);
          quiz_best = quiz3;
      

      应该是:

      else {
          printf("Best quiz mark is: \n", quiz3);
          quiz_best = quiz3;
      }
      

    main() 函数中的声明struct student_profile; 没有用。

    scanf() 使用 %d 而不是 %s 来表示字符串值。

    • 您有具有相同索引变量的嵌套循环:for(i=0,i&lt;n; i++;) 无论如何都不正确:它应该是 for (i = 0; i &lt; n; i++)

    • printf 缺少 %d 以打印 quiz_best 变量。

    • quiz_best 在计算之前打印出来

    • comparison 函数应该返回 quiz_best,更新函数参数对调用者的变量没有影响。

    这是修改后的版本:

    #include <stdio.h>
    
    struct student_profile {
        char name[100];
        int ID[100];
        int Final;
        int mid;
        int attendance;
        int assignment;
        int quiz1;
        int quiz2;
        int quiz3;
    } s[100];
    
    int comparison(int quiz1, int quiz2, int quiz3) {
        int quiz_best;
    
        if (quiz1 > quiz2 && quiz1 > quiz3) {
            printf("Best quiz mark is: \n", quiz1);
            quiz_best = quiz1;
        } else
        if (quiz2 > quiz1 && quiz2 > quiz3) {
            printf("Best quiz mark is: \n", quiz2);
            quiz_best = quiz2;
        } else {
            printf("Best quiz mark is: \n", quiz3);
            quiz_best = quiz3;
        }
        return quiz_best;
    }
    
    int main() {
        int i, n, quiz_best;
    
        printf("Number of students: \n");
        scanf("%d", &n);
        for (i = 0; i < n; i++) {
            printf("\nStudent No: %d\n", i);
            printf("Name: ");
            scanf("%99s", s[i].name);
            printf("ID: ");
            scanf("%99s", s[i].ID);
            printf("Final: ");
            scanf("%d", &s[i].Final);
            printf("mid: ");
            scanf("%d", &s[i].mid);
            printf("attendance: ");
            scanf("%d", &s[i].attendance);
            printf("assignment: ");
            scanf("%d", &s[i].assignment);
            printf("quiz1: ");
            scanf("%d", &s[i].quiz1);
            printf("quiz2: ");
            scanf("%d", &s[i].quiz2);
            printf("quiz3: ");
            scanf("%d", &s[i].quiz3);
        }
        printf("\n Students Informations:\n");
    
        for (i = 0; i < n; i++) {
            printf("Student No: %d\n", i);
            printf("Name: %s\n", s[i].name);
            printf("ID: %d\n", s[i].ID);
            printf("Final: %d\n", s[i].Final);
            printf("mid: %d\n", s[i].mid);
            printf("attendance: %d\n", s[i].attendance);
            printf("assignment: %d\n", s[i].assignment);
            printf("quiz1: %d\n", s[i].quiz1);
            printf("quiz2: %d\n", s[i].quiz2);
            printf("quiz3: %d\n", s[i].quiz3);
            quiz_best = comparison(s[i].quiz1, s[i].quiz2, s[i].quiz3);
            printf("The best quiz mark is: %d\n", quiz_best);
            printf("\n");
        }
        return 0;
    }
    

    【讨论】:

    • 非常感谢兄弟
    • @sun:您可能想对此以及任何对您有帮助的答案进行投票。
    猜你喜欢
    • 2021-12-15
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    • 2016-10-30
    • 2017-03-04
    • 1970-01-01
    • 2019-01-02
    • 2022-08-17
    相关资源
    最近更新 更多