首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2013-03-26 
关于c语言,输出时%d%c的疑问printf时,如果输入的是%d的数字。用的是%c形式输出。则会输出对应的ascll码对应

关于c语言,输出时%d%c的疑问
printf时,如果输入的是%d的数字。用的是%c形式输出。则会输出对应的ascll码对应的字符。但是如果是输入%c字符。输出%d,则会是乱码不是对应ascll码。。这是怎么回事。

#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;
}

[解决办法]
char bl = 0;
[解决办法]
下面程序我输入a,输出97,没问题,楼主给一个出现乱码的例子代码出来

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

scanf("%c",&ch);

printf("%d\n",ch);
}

[解决办法]
引用:
%d从栈上取4个字节,%c从栈上取1个字节,不乱码才怪


纠正我的说法。这里char类型压栈时会发生寻常算数类型转换,转换成signed int类型,输出正确,,

汇编应该是

movsx eax, byte ptr [c]
push eax
....

[解决办法]
整数大于255的吧。。。
[解决办法]
%d%c和后面对应的参数的类型要一致。

[解决办法]
printf里面的%和变量的一一对应关系
scanf里面的%和变量以及变量前加不加&的一一对应关系
是C代码中非常容易出错的地方,而且通常编译还不出错。
所以在编译源代码之前值得专门仔细检查一遍甚至多遍。

热点排行