int main(){
int N, i, j=0;
float MA, MB, asum=0, bsum=0, y;
printf("\number of pairs: "); scanf("%d", &N);
int a[N+1], b[N+1], c[N+1];
for(i=1; i<N+1; i++){
printf("\na%d",i); printf("=");
scanf("%f", &a[i]);
printf("b%d",i); printf("=");
scanf("%f", &b[i]);
printf("\n aSUM= %.6f \n",asum);
asum+=a[i];
printf("\n aSUM= %.6f \n",asum);
}
这段代码的想法很简单。用户输入int或float值,然后将它们相加并输出为浮点值。然而,我立即获得了天文数字。铁。如果它试图添加0和7,它输出值1088421888.000000。到底他妈发生了什么?? :d
答案 0 :(得分:5)
您应该使用现代C编译器(如GCC 4.8)启用所有警告。
int a[N+1], b[N+1], c[N+1];
//...later
scanf("%f", &a[i]);
这不起作用:%f
用于scanf(3)需要float
指针的控件格式,而&a[i]
是指向int的指针。 (而海湾合作委员会会对此发出警告)。
你也有其他错误。请启用所有警告 - 例如。使用gcc -Wall
BTW,最好将\n
放在printf
格式控制字符串的 end 上(不是在开头!)。
答案 1 :(得分:2)
您对int
使用了错误的说明符。它将调用未定义的行为。你会得到任何东西。你很幸运,你没有得到理想的结果!
答案 2 :(得分:2)
sscanf不知道它们的指针参数的类型,所以你在整数指针中读取浮点数。因此,整数指针是浮动解释的。
您需要将scanf转换为临时浮点变量,然后将其转换为整数。所以:
float theFloat;
sscanf("%f", &theFloat);
N[a]=theFloat;