我有这段代码:
#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;的最后一个值,但我不知道如何修复它。
答案 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 ++)”,然后再次运行代码。