C浮点值转换

时间:2013-12-14 18:49:16

标签: c

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

3 个答案:

答案 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;