簡體   English   中英

為什么printf(“ value:%f”,10/2); 輸出0.000000?

[英]Why does printf(“value: %f”,10/2); output 0.000000?

我知道整數算術將截斷分數,但在這里它至少應打印5。為什么打印0.000000

調用printf具有未定義的行為,因為轉換說明符%f與表達式10 / 2的類型int 作為表達的兩個操作數10 / 2具有類型int ,結果具有類型int ,因為它是兩個操作數的常見的類型。

至少使用10.0 / 2 在這種情況下,表達式的類型為double

或輸出的整數表達式10 /2使用轉換符%d%i喜歡

printf( "value: %d", 10 / 2 );

根據C標准(7.21.6.1 fprintf函數)

9如果轉換說明無效,則行為未定義。275) 如果任何參數不是對應轉換說明的正確類型,則行為未定義

102不是有效的float 它們是int

要使程序打印正確的輸出,請執行以下操作:

printf("value:%f",10./2.);

請注意. 每個數字之后。 這向編譯器表示該數字是浮點數。

(Q. 有點錯誤所以請檢查正文) C float *q=NULL; printf(“%f”,q); output 為 0.000000 但在 C++ 中 float *q=nullptr; cout&lt; <q; give output 0?< div><div id="text_translate"><p> <strong>[我的問題有點奇怪,但現在更改它是不對的,因為它得到了很好的解釋,但我正在使用 [Update].......[Update End] 標簽對其進行編輯,以避免對即將訪問我的訪問者造成混淆郵政]</strong></p><p> <strong>C</strong></p><pre> #include&lt;stdio.h&gt; int main() { float *q=NULL; printf("%f\n",q); }</pre><p> <strong>OUTPUT</strong></p><pre> 0.000000</pre><ul><li> 在 C output 為 0.000000</li><li> 所以這里 q 是浮點型 null 指針還是 q 是 (void *) 類型 null 指針?</li><li> 我覺得它是 (void *) 類型。</li><li> 因此格式(%f)和參數(void *)不匹配會調用未定義的行為並導致此類錯誤類型output</li></ul><p> <strong>[更新]</strong><strong>但是你會回答我自己的問題,我問的這么愚蠢的問題</strong></p><p>基本上我很困惑,我覺得我必須打印一些浮點類型或 void 類型,但關鍵是我正在打印地址,所以使用 %f 來打印地址只是愚蠢的。</p><p> 顯然 q 是浮點型指針,只是我覺得完全錯誤</p><p>通常我們使用 %u 來打印任何類型變量的地址(int,char,float)但是對於指針我們應該使用 %p</p><p> <strong>[更新結束]</strong></p><p> <strong>C++</strong></p><pre> #include&lt;iostream&gt; int main() { float *q=nullptr; std::cout&lt;&lt;q; }</pre><p> <strong>OUTPUT</strong></p><pre> 0</pre><ul><li> 在 C++ 中給出 output 0</li><li> 我認為這很好,因為它將第一個 memory 塊的地址指向任何內容</li><li>如果 q 是 nullptr_t 類型,那么 C++11 應該給出歧義錯誤意味着這里 q 是浮點類型 nullptr。</li></ul><p> <strong>[更新]</strong></p><p> C 和 C++ 標准都指定 null 指針常量比較等於零 - 他們沒有說明該地址的內容。</p><p> 顯然 q 只是浮點類型 nullptr</p><p> <strong>[更新結束]</strong></p><p> <strong>因此,如果我的兩個假設都是正確的,那么為什么在 C++ nullptr 中將其類型從 nullptr_t 更改為浮點類型,但在 C NULL 中將其類型更改為(void <em>)</em>不更改</strong>?</p><p> <strong>[更新]</strong></p><p> 我在 C 的第一個示例中的第一個假設 q 是 (void*) 類型已經是錯誤的,第二個假設是在第二個例子中。 C++ 的 q 是 nullptr_t 也是錯誤的。</p><p> 所以在這里總結一下</p><p>我試圖比較這發生在 C 和這發生在 c++ 我覺得這些事情是相互矛盾的</p><p>但實際上,在 C 中,我使用 %f 打印第一個錯誤的指針地址。 In C++ code all I think is all right except One thing that it is wrong to assume that null pointer points to 1st block of memory which is 0th as it is not specify in c standard it just say that nullptr constant compares to 0 when evaluate.</p><p> 這么多的錯誤只是問題,所以這不是正確的問題</p><p> <strong>[更新結束]</strong></p></div></q;>

[英](Q. is little wrong So please check body) C float *q=NULL; printf(“%f”,q) ; output is 0.000000 but in C++ float *q=nullptr; cout<<q; give output 0?

暫無
暫無

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

相關問題 為什么printf輸出double的隨機值,而int輸出0.000000? 為什么printf(“%。1f”,1)輸出0.0 (Q. 有點錯誤所以請檢查正文) C float *q=NULL; printf(“%f”,q); output 為 0.000000 但在 C++ 中 float *q=nullptr; cout&lt; <q; give output 0?< div><div id="text_translate"><p> <strong>[我的問題有點奇怪,但現在更改它是不對的,因為它得到了很好的解釋,但我正在使用 [Update].......[Update End] 標簽對其進行編輯,以避免對即將訪問我的訪問者造成混淆郵政]</strong></p><p> <strong>C</strong></p><pre> #include&lt;stdio.h&gt; int main() { float *q=NULL; printf("%f\n",q); }</pre><p> <strong>OUTPUT</strong></p><pre> 0.000000</pre><ul><li> 在 C output 為 0.000000</li><li> 所以這里 q 是浮點型 null 指針還是 q 是 (void *) 類型 null 指針?</li><li> 我覺得它是 (void *) 類型。</li><li> 因此格式(%f)和參數(void *)不匹配會調用未定義的行為並導致此類錯誤類型output</li></ul><p> <strong>[更新]</strong><strong>但是你會回答我自己的問題,我問的這么愚蠢的問題</strong></p><p>基本上我很困惑,我覺得我必須打印一些浮點類型或 void 類型,但關鍵是我正在打印地址,所以使用 %f 來打印地址只是愚蠢的。</p><p> 顯然 q 是浮點型指針,只是我覺得完全錯誤</p><p>通常我們使用 %u 來打印任何類型變量的地址(int,char,float)但是對於指針我們應該使用 %p</p><p> <strong>[更新結束]</strong></p><p> <strong>C++</strong></p><pre> #include&lt;iostream&gt; int main() { float *q=nullptr; std::cout&lt;&lt;q; }</pre><p> <strong>OUTPUT</strong></p><pre> 0</pre><ul><li> 在 C++ 中給出 output 0</li><li> 我認為這很好,因為它將第一個 memory 塊的地址指向任何內容</li><li>如果 q 是 nullptr_t 類型,那么 C++11 應該給出歧義錯誤意味着這里 q 是浮點類型 nullptr。</li></ul><p> <strong>[更新]</strong></p><p> C 和 C++ 標准都指定 null 指針常量比較等於零 - 他們沒有說明該地址的內容。</p><p> 顯然 q 只是浮點類型 nullptr</p><p> <strong>[更新結束]</strong></p><p> <strong>因此,如果我的兩個假設都是正確的,那么為什么在 C++ nullptr 中將其類型從 nullptr_t 更改為浮點類型,但在 C NULL 中將其類型更改為(void <em>)</em>不更改</strong>?</p><p> <strong>[更新]</strong></p><p> 我在 C 的第一個示例中的第一個假設 q 是 (void*) 類型已經是錯誤的,第二個假設是在第二個例子中。 C++ 的 q 是 nullptr_t 也是錯誤的。</p><p> 所以在這里總結一下</p><p>我試圖比較這發生在 C 和這發生在 c++ 我覺得這些事情是相互矛盾的</p><p>但實際上,在 C 中,我使用 %f 打印第一個錯誤的指針地址。 In C++ code all I think is all right except One thing that it is wrong to assume that null pointer points to 1st block of memory which is 0th as it is not specify in c standard it just say that nullptr constant compares to 0 when evaluate.</p><p> 這么多的錯誤只是問題,所以這不是正確的問題</p><p> <strong>[更新結束]</strong></p></div></q;> 為什么我的程序的output 0.000000 應該是我在提示時輸入的值。 下面是代碼 為什么 printf(&quot;%f&quot;,0); 給出未定義的行為? 為什么printf會返回一個值? 為什么在此程序中printf(i)給出0作為輸出? 為什么“printf”不產生任何 output? 為什么printf()輸出-1表示大整數? 為什么printf會在我的程序中輸出?
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM