【问题标题】:why does the program exit without taking any input?为什么程序在没有任何输入的情况下退出?
【发布时间】:2022-02-14 14:22:23
【问题描述】:

我正在尝试编写一个代码,以找出 10 次测验中的最低分数,并计算测验、期中和期末考试的最终成绩。

这是代码。当我运行它时,它只是说程序以退出代码 0 结束。


#include <stdio.h>
#include <math.h>
int main(void)
{
    int i, quiz[i], min, QUIZ, final_grade;
    double MID, FINAL;
    
    
    /*loop store quiz grades*/
    for (i=1; i<=10; ++i)
    {   
        printf ("Enter quiz%d grade:", i);
        scanf ("%d", &quiz[i]);
    }
    
    /*store midterm and final value*/
    printf ("Enter midterm grade:");
    scanf ("%lf", &MID);
    printf ("Enter final exam grade:");
    scanf ("%lf", &FINAL);
    
    /*find sum of quiz score*/
    QUIZ=0;
    
    for (i=1; i<=10; ++i)
    {
        QUIZ += quiz[i];
    }
    printf ("%d",QUIZ);
    
    /*find min quiz score*/
    for (i=1; i<=10; ++i)
    {
        min=quiz[1];
        if (quiz[i]<min);
            min=quiz[i];
    }
    printf ("\n%d",min);
    
    /*calculate quiz pecent score*/
    QUIZ = 2.5*(QUIZ-min)/9;
    printf ("\n%d",QUIZ);
    
    /*calculate final grade*/
    if (MID>=FINAL)
    {
        final_grade=MID*.35+FINAL*.4+QUIZ;
    }
    else
    {
        final_grade=MID*.25+FINAL*.5+QUIZ;
    }
    printf ("\nThe final grade is:%d", final_grade);

    return 0;
}

这部分效果很好

{
    int i, quiz[i];
    /*loop store quiz grades*/
    for (i=1; i<=10; ++i)
    {    
        printf ("Enter quiz%d grade:", i);
        scanf ("%d", &quiz[i]);
    }
    int min;
    min=1;
    /*find min quiz grade*/
    if (quiz[i]<quiz[min])
        {
            min=i;
        }
    quiz[min]=0;
    printf ("%d", quiz[min]);
    
    
    return (0);
}

但是当我向程序添加更多工作时,它不再需要输入。

【问题讨论】:

标签: c


【解决方案1】:

直说这是错误的

int i, quiz[i]

因为你没有给i 一个值,你期望quiz 有多大

我改成

int i, quiz[10]

之后它运行并给我输出,但不确定它是否正确的输出。

Enter quiz1 grade:3
Enter quiz2 grade:4
Enter quiz3 grade:5
Enter quiz4 grade:
5
Enter quiz5 grade:5
Enter quiz6 grade:5
Enter quiz7 grade:5
Enter quiz8 grade:5
Enter quiz9 grade:5
Enter quiz10 grade:5
Enter midterm grade:5
Enter final exam grade:6
47
5
11
The final grade is:15

【讨论】:

    【解决方案2】:

    在您的代码中

     int i, quiz[i], min, QUIZ, final_grade;
    

    您正在使用未初始化的i。此时i 的值是不确定的。因此,您的程序行为未定义。

    您需要确保使用有效值填充i,然后才能使用它来定义 VLA 大小。

    【讨论】:

      【解决方案3】:
      int i, quiz[i]; 
      

      这是错误的。你还没有给出i 的大小,因此quiz 应该有多大。

      这是正确的方法:-

      int i, quiz[5]; //you can change the size.
      

      【讨论】:

      • 您也可以使用i = 5, quiz[i]; 并将quiz 设为VLA(可变长度数组)。虽然请注意,在 C11 之后,该标准不要求支持 VLA(但我不知道有任何编译器选择不继续支持 - 至少通过扩展)
      【解决方案4】:

      使用 0 进行初始化

      int i = 0
      

      然后以 i = 0 开始循环

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

      一切顺利

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-04
        • 2021-12-05
        • 2022-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多