C程序问题

时间:2017-02-27 03:01:35

标签: c

我有这段代码:

#include <stdio.h>
#include<conio.h>

main(){
    float promAnual=0.0;
    int numMeses, numToneladas,i, suma = 0, mesTon = 0;
    float toneladas[12];

    for(i = 1; i < 13; i++){
        printf("Ingrese la cantidad de toneladas del mes #%d->", i);
        scanf("%f", &toneladas[i] );
     }

    for(i = 1; i < 13; i++){
        suma = suma + toneladas [i];
    }
    promAnual = suma / 12.0;

    for(i = 1; i < 13; i++){
        if(toneladas[i]>promAnual){
            numMeses = numMeses + 1;
        }
    }
    numToneladas = 0;
    mesTon = 0;

    for(i = 1; i < 13; i++){
        if(toneladas[i]>toneladas[i+1]){
            mesTon = i; 
            numToneladas = toneladas[i];
        }
    }

    printf("El promedio anual es: %0.2f, %d mes(es) tuvieron mayor cosecha que el promedio anual, y el mayor numero de toneladas se produjo en el mes #%d con %0.2f", promAnual,numMeses,mesTon, numToneladas);
    }

问题是最后一个printf中的最后两个变量显示错误的值,我知道为什么,但我不知道如何修复它,这是因为最后一个&#34; for&#34;正在分配&#34; i&#34;的最后一个值,但我不知道如何修复它。

2 个答案:

答案 0 :(得分:0)

根据您的代码中的错误,我说您可能不会读书来学习。这很不幸,因为读书以学习C的人通常不会遇到这种麻烦。

float toneladas[12];

for(i = 1; i < 13; i++){
    printf("Ingrese la cantidad de toneladas del mes #%d->", i);
    scanf("%f", &toneladas[i] );
 }

在这里,您宣布了一个包含12个鸡蛋的纸箱,egg[0]egg[11](将它们写出并逐个计数,您将看到有12个鸡蛋) ...然后尝试插入egg[12],这是超出界限的。期待一个破蛋!

在整个代码中你一次又一次地提到那个破碎的蛋。如果你制作的食谱是灾难性的,我不会感到惊讶!

说到破碎的鸡蛋,你有一个未初始化的变量:int numMesses然后你可以在没有初始化的情况下使用它:numMeses = numMeses + 1; ......

int numMeses, numToneladas,i, suma = 0, mesTon = 0;
/* SNIP */
printf("El promedio anual es: %0.2f, %d mes(es) tuvieron mayor cosecha que el promedio anual, y el mayor numero de toneladas se produjo en el mes #%d con %0.2f", promAnual,numMeses,mesTon, numToneladas);

如您所见,numToneladas被声明为int。但是,在您致printf的电话中,您告诉printf它是double。你在骗printf;难怪它倒在你身边!

您似乎包含了非便携式标头<conio.h>,但我认为没有意义。与大多数人不同,您没有使用该标题中的单个函数!为什么要包含您不使用的非便携式标题?

我唯一的猜测是你从某个地方复制/粘贴,并试图通过无指导的反复试验来学习。正如你所见,那是危险的;由于你今天遇到的奇怪,难以调试的错误,它会让你头疼。你这次很幸运,因为你发现了。如果你在现实世界中编写这样的代码,你可能会有人受伤!

读一本书!在您偶然发现这些练习时进行练习。我可以推荐K&amp; R2E。

答案 1 :(得分:0)

你最好检查“for”循环的结束条件,数组toneladas有12个存储,从0到11,但是你将它从1设置为12,可能会导致你的问题。   请尝试设置“for(i = 0; i&lt; 12; i ++)”,然后再次运行代码。