c语言中的格式化占位符到底是什么意思?

Junior_s 2017-03-16 09:32:18
比如这段运算,正常逻辑,运算结果应该是12,但是为什么用%f 格式化时每次运算结果都不同?

#include <stdio.h>
#include <stdlib.h>

int main(){
int a=3;
int b=4;
printf("result:%f",a+b%(a+b)/a+a*b-b);
return 0;
}

初次接触C语言,谢谢指教。
...全文
458 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wizard_tiger 2017-03-17
  • 打赏
  • 举报
回复
结果不同应该是溢出了。 运算式是整形的。
自信男孩 2017-03-17
  • 打赏
  • 举报
回复
自信男孩 2017-03-17
  • 打赏
  • 举报
回复
这个值是12,那么在内存单元就是以0101这样的二进制序列表示的。输出到终端(显示器),是什么值要看你以什么格式输出了;意思,在内存中存放的二进制都是一样的,不同的地方是输出方式。该程序以%d输出就是12,但是以%f输出,那么就要将12的二进制按照浮点数的表示形式输出,但是浮点数和整型数在内存中表示是不一样的,它有整数和小数部分。 建议你熟悉一下浮点型在内存中的表示,然后将12的二进制数放到浮点型的表示里,就能知道为啥输出的不一样了。
赵4老师 2017-03-17
  • 打赏
  • 举报
回复
printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方,而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。
坤昱 2017-03-16
  • 打赏
  • 举报
回复
%号加后面的字符表示要调用什么类型的代码块(比如int,char)每个代码块的处理方式不同 ,所以出的结果不同 http://blog.csdn.net/a29562268/article/details/56331674 参考printf函数实现代码
J654820047 2017-03-16
  • 打赏
  • 举报
回复
程序本身是定义为 int 类型,如果你用 %f 的话,可能会导致数据溢出。
J654820047 2017-03-16
  • 打赏
  • 举报
回复



#include <stdio.h>
#include <stdlib.h>

int main(){
    int  a=3;
    int b=4;
    //printf("result:%f",a+b%(a+b)/a+a*b-b);	
    printf("result:%d",a+b%(a+b)/a+a*b-b);		//在这里,我们最好用 %d 的形式,因为你定义的类型是 int 型
	return 0;
}


J654820047 2017-03-16
  • 打赏
  • 举报
回复
我要提醒楼主的是,可能是C语言运算符和结合性的问题,建议你查一下C语言运算符的优先级。

69,372

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧