关于c语言,输出时%d%c的疑问

果冻虾仁 2013-02-10 08:42:10
printf时,如果输入的是%d的数字。用的是%c形式输出。则会输出对应的ascll码对应的字符。但是如果是输入%c字符。输出%d,则会是乱码不是对应ascll码。。这是怎么回事。
...全文
702 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2013-02-19
  • 打赏
  • 举报
回复
printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方,而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。
ForestDB 2013-02-18
  • 打赏
  • 举报
回复
%d%c和后面对应的参数的类型要一致。
Athenacle_ 2013-02-16
  • 打赏
  • 举报
回复
引用 4 楼 Athenacle_ 的回复:
%d从栈上取4个字节,%c从栈上取1个字节,不乱码才怪
纠正我的说法。这里char类型压栈时会发生寻常算数类型转换,转换成signed int类型,输出正确,, 汇编应该是

movsx eax, byte ptr [c]
push eax
....
东方灬传说 2013-02-16
  • 打赏
  • 举报
回复
整数大于255的吧。。。
25K纯帅 2013-02-13
  • 打赏
  • 举报
回复
下面程序我输入a,输出97,没问题,楼主给一个出现乱码的例子代码出来

#include<stdio.h>
void main()
{
	char ch;

	scanf("%c",&ch);

	printf("%d\n",ch);
}
sadsadz 2013-02-11
  • 打赏
  • 举报
回复
char bl = 0;
Athenacle_ 2013-02-11
  • 打赏
  • 举报
回复
%d从栈上取4个字节,%c从栈上取1个字节,不乱码才怪
囧囧囧1024 2013-02-10
  • 打赏
  • 举报
回复
不会是乱码的~你试试~~
#include <stdio.h>
int main()
{
	int a1=0;
	char b1=0;
	scanf("%c %c",&a1,&b1);

	printf("output: a1=%d, b1=%d",a1,b1);
	return 0;
}
nwpulei 2013-02-10
  • 打赏
  • 举报
回复
乱码不至于,输入%c字符。输出%d,输出的应该是字符的ascii码。你不要输入,直接输出试试。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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