2017-09-02 97 views
-8
#include <stdio.h> 
//Compiler version gcc 6.3.0 

int main(void) 
{ 

    float a=10; 
    printf("%f"+1,a); 

    return 0; 
} 

输出 - d谁能告诉我这是为什么在C语言中发生

#include <stdio.h> 
//Compiler version gcc 6.3.0 

int main(void) 
{ 

    float a=10; 
    printf("%f"+36,a); 

    return 0; 
} 

输出 - P

当过我改变的+1值它给不同的输出。 ...解释一下为什么

+0

你忘了问你的编译器所有的警告和调试信息。用[gcc](http://gcc.gnu.org/)用'gcc -Wall -Wextra -g'编译(然后编译器会警告你)。 –

+0

顺便说一句,http://floating-point-gui.de/是一个有用的读取 –

+0

你真的认为'+ 1'和'+ 36'在做什么?你并没有改变你想要打印的数字,也没有(真的)改变你想要打印的格式字符串。你正在做一些非常奇怪的指针算术,这不可能导致有用或正常工作的代码。你试图从他们那里学习一些奇怪的东西吗?或者是什么? [附注:我*可以*告诉你为什么会发生这种情况,如果你真的想知道,但首先你必须解释你真的想做什么。] –

回答

0

我不确定你到底想要完成什么。

如果你想要做的总和,你就必须在逗号后做到这一点:

从这个:

printf("%f"+36,a); 

这样:

printf("%f",a+36); 

同为其他总和。

+0

如果这对你有效,请接受它作为答案。 而且,对于谁低估了我的答案:请考虑留下评论,说明如何改进;我真的很感激! –

+0

我猜想downvote可能是因为我们无法知道这是OP实际上试图做什么。我现在在投票,所以我可以投票结束OP对同一问题的第二个问题(在https://stackoverflow.com/questions/46015392/can-anybody-tell-me-why-this-happening-in-c )作为这个的一个副本。 –

+0

@SteveSummit你是完全正确的,我的答案只适用于如果这是OP的问题。没有太多的细节,所以谁知道他想要做什么。另外,我之前没有看到其他问题,但OP已将'float'改为'int',所以他可能只是试图用SO来代替随机的东西,而不是指南;谁知道。无论如何,谢谢! –

0

你绝对应该编译所有警告。我用gcc -Wall -Wextra -Werror -pedantic。它没有编译我的警告,因为printf的参数太多。

当我测试了你发布的代码时,它打印出'f'和'A ???'。我不确定你想要做什么,但是我相信它与你的浮点数如何与数字相加来给你一个Ascii角色。

相关问题