繁体   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