簡體   English   中英

為什么pow函數在printf()中使用時會產生任意結果?

[英]Why the pow function when used in printf() produce arbitrary results?

我在C-中有此代碼

#include <stdio.h>
#include <math.h>
int main()
{
    printf("%d",(12345/pow(10,3)));
}

它輸出任意值,為什么不輸出12? 上面的代碼不等於-

#include <stdio.h>
#include <math.h>
int main()
{
    int i=12345/pow(10,3);
    printf("%d",i);
}

它輸出12,為什么這兩個代碼輸出不同的值?有人可以解釋一下。

pow返回一個double ,因此導致不確定的行為,因為您將其傳遞給需要int的格式字符串,因為typeof(int / double) == double

嘗試

printf("%lf\n", 12345 / pow(10, 3));

或使用明確的演員表,例如

printf("%d\n", 12345 / (int) pow(10, 3));

的結果pow是類型double ,所以整個表達12345/pow(10,2)具有類型double 不幸的是,您試圖使用%d轉換說明符打印該double值,該說明符期望為int值。

如果要輸出整數,請執行以下操作:

printf( "%d", (int)(12345/pow(10,3)));

否則,將其打印為雙精度:

printf( "%f", 12345/pow(10,3));

12345/pow(10,3)輔助為int時,結果將轉換為int。

當將12345/pow(10,3)傳遞給printfprintf一個double壓入堆棧,但是printf期望根據您的格式規范為int。

printf( "%g", 12345/pow(10,3));

這可以解決您的問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM