两段简单的C语言输入输出代码,这是为什么??

#include<stdio.h>
void main()
{
char a,b,c;
scanf("%c%c%c",&a,&b,&c);
printf("%d,%d,%d\n",a,b,c);
getch();
}

为什么我打 三个英文字母上去 比如 a b c 返回的数字为什么是 97 32 98
别的字母组合也是差不多的结果 混乱

还有一段费解。。

目的是输入小写输出大写
#include<stdio.h>
void main()
{
char c,s;int i;
for(i=0;i<5;i++)
{
scanf("%c",&c);
s=c-32;
printf("%c\n",s);

}
getch();
}

我输入a 回车,返回:A 换行一个乱码 换行

再输入b 回车,返回:B 换行 一个乱码 换行

输入c 回车,返回:C 换行 空 换行

再按任何键就结束

为什么?!?!?!!?

第一题:
那个是ASCII编码的结果

你输入的是char类型的数据,输出的是数字类型,这里面存在一个字符到数字的转换的过程,所对应的是ASCII码的字符编码数字

首先,在你的scanf函数中,双引号区域中是没有空格的,而你输入的可是带空格的abc(a b c),这里面就有了一个需要注意的地方:
在你输入信息时候,一定要严格遵守scanf函数中的双引号区域中的格式.
别忘了,空格也算一个字符!

经过"a b c"的信息输入的过程后,计算机读到的信息是:a、空格、b。

根据ASCII编码的定义:
a=97
空格=32
b=98

故输出的结果是:97,32,98

第二题:
本题与第一题相似,都是使用字符和ASCII编码之间的切换
回车(换行符)的ASCII编码是10
使用scanf函数输入字符数据时,由于是字符类型,那么输入数据之后的空格也将被当做字符数据输入,下一次读取时,数据完的回车字符就会被读入,自动读取,而那个乱码就是回车字符的表示。

如果你只想输入一个字符,可以使用:getch函数,使用方法:c=getch();
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-23
#include<stdio.h>
void main()
{
char a,b,c;//声明是字符类型的
scanf("%c%c%c",&a,&b,&c);
printf("%d,%d,%d\n",a,b,c);
//输出是整型的..所以出来的是a,b,c对应的ASCII码 a=97 printf里要用%c才是字母
getch();
}
第二个因为回车也是字符。。本回答被提问者采纳
第2个回答  2010-02-09
首先,第一个问题电脑返回的是ASCII码,而你的输出语句%d,是输出整形数字的,所以计算机输出的是相应字母的ASCII值。想要输出字母,应为%c就可以了。
第二题,s是char类型的,建议使用int型,可能是因为计算机强制转化类型时会丢失字节。

建议您看看谭浩强的书,再按格式输出那一章讲得很好
第3个回答  2015-10-26
C语言常用输入输出函数:
printf 格式输出到屏幕
fprintf 格式输出到磁盘

scanf 从屏幕格式输入
fscanf 从磁盘格式输入

putchar 字符输出到屏幕
puts 字符串输出到屏幕
fputc 字符输出到磁盘
fputs 字符串输出到磁盘

getchar 从屏幕得到一个字符
gets 从屏幕得到一个字符串
fgetc 从磁盘得到一个字符
fgets 从磁盘得到一个字符串
第4个回答  2010-02-10
a的十进制是97,A是65;
第2题中我不明白你为什么会用一个Char型去减一个十进制常数32。
你试着int c,s,i;
scanf("%d",&c);
试试;
第一题:应该是97,98,99;我看不出错误但你这加个getch();是什么意思?
相似回答