关于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);
}
[解决办法]
纠正我的说法。这里char类型压栈时会发生寻常算数类型转换,转换成signed int类型,输出正确,,
汇编应该是
movsx eax, byte ptr [c]
push eax
....
[解决办法]
整数大于255的吧。。。
[解决办法]
%d%c和后面对应的参数的类型要一致。
[解决办法]
printf里面的%和变量的一一对应关系
scanf里面的%和变量以及变量前加不加&的一一对应关系
是C代码中非常容易出错的地方,而且通常编译还不出错。
所以在编译源代码之前值得专门仔细检查一遍甚至多遍。