//getchar() //按照如下输入格式(其中<CR>代表回车,注意 回车也是一个字符)则输出结果是? //12<CR> //34<CR> #include <stdio.h> int main() { char a,b,c,d; //printf("请输入:\n"); scanf("%c%c",&a,&b); c=getchar(); d=getchar(); printf("输出如下:\n"); printf("%c%c%c%c\n",a,b,c,d); }
输出:
为何会出现上述结果呢?输入的 4 去哪儿了?
注意:
函数getchar()没有参数,函数的返回值就是从终端键盘读入的字符,一次只能读取一个字符。用户输入的字符被存放在键盘缓冲区中,包括回车符’\n’。但是,对于 scanf 函数,’\n’ 会触发 scanf 读取输入缓冲区的内容,但遇到 ‘\n’ 或空格 ’ ’ 会停止读取,而 getchar 会直接读取 ‘\n’ 和空格。
可以再加上如下测试语句:
#include <stdio.h> int main() { char a,b,c,d; //printf("请输入:\n"); scanf("%c%c",&a,&b); c=getchar(); d=getchar(); printf("输出如下:\n"); printf("%c%c%c%c\n\n",a,b,c,d); printf("-------------------------\n\n"); printf("测试:\n\n"); printf("a=%c\n\n",a); printf("b=%c\n\n",b); printf("c=%c\n\n",c); printf("d=%c\n\n",d); }
结果为:
也就是说,用户输入12和回车之后,’‘c=gerchar();"这个语句就已经将回车符读取了,那么自然,用户输入的3被’‘d=getchar();’'这个语句所读取。
所以本题的结果正如看到的那样,12 回车符(看不见,即换行了)3(在下一行)
//以下不能输出字符A的语句是? //已知字符A的ASCII码值为65,字符a的ASCII码值为97 #include <stdio.h> int main() { printf("%c\n\n",'a'-32);//97-32=65 输出整型数字65对应的字符A printf("%d\n\n",'A'); //显然输出为字符A对应的整型数字65 printf("%c\n\n",65);//输出整型数字65对应的字符A printf("%c\n\n",'B'-1);//66-1=65 输出整型数字65对应的字符A }
输出:
原因显然:
//若运行程序时从键盘输入 48<回车>,则输出结果是? #include <stdio.h> int main() { char c1,c2; //48~57对应字符'0'到'9' scanf("%d",&c1); //需要知道48对应的字符为'0' c2=c1+9; //那么,48+9=57,故c2='9' printf("%c%c\n\n",c1,c2); //故输出 09 }
输出:
注释已经说明。另外,字符'A' ~ 'Z' 对应 整型 65 ~ 90
。字符'a' ~ 'z' 对应 整型 97 ~ 122
,每一个小写字母都比其对应的大写字母 大32。字符'0' ~ '9' 对应 整型 48 ~ 57
。这是初学者应当记忆的基础知识。
//输入 YES<回车> 则结果是? #include <stdio.h> int main() { char a,b,c; a=getchar();//从键盘输入一个字符,送给字符变量a b=getchar();//从键盘输入一个字符,送给字符变量b c=getchar();//从键盘输入一个字符,送给字符变量c putchar(a);//输出变量a的值 putchar(b);//输出变量b的值 putchar(c);//输出变量c的值 putchar('\n');//换行 return 0; }
输出:
简析
:在连续输入“YES”并按回车键后,字符才被送到计算机中,然后输出“YES”3个字符。
说明
:在用键盘输入信息时,并不是在键盘上按一次键,对应的字符就会立即输入到计算机中。输入的字符先暂存在键盘缓冲器中,只有按了回车键,才把它们一起输入到计算机中,然后按先后顺序分别赋给相应的变量。
如果:运行本程序时,输入一个字符立马按回车键,会得到什么结果呢?本例中,如果输入字符Y后马上按回车键,再输入字符E后也马上按回车键,则会分别输出Y和E。如下所示:
这里,第1行输入的不是一个字符Y,而是两个字符:Y和换行符
,其中字符Y赋给了变量a,换行符赋给了变量b。第2行接着输入两个字符,E和换行符,其中字符E赋给了变量c,换行符没有赋给任何变量
。在用putchar()函数输出变量a,b,c的值时,就输出了字符Y,然后输出换行,再输出字符E,然后执行putchar(’\n’),换行。
另外注意,执行getchar()函数不仅可以从输入设备获取一个可显示的字符,还可以获取在屏幕上无法显示的字符,如控制字符。
//执行以下程序,输出结果是? #include <stdio.h> int main() { int x=12; double y=3.1415926; printf("%d%10.6f\n",x,y); }
输出为:
在’’%10.6f
’'格式控制字符中,10代表域宽
,包括小数点“.”,6代表小数点后的位数,由于第七位是6,因此第6位四舍五入为3
。
//还是getchar() //已知输入格式为 4空格5回车 // 67回车 //则输出结果是? #include <stdio.h> int main() { char a,b,c,d,e; scanf("%c%c",&a,&b);//注意这里输入的是字符型数据,空格也会被作为字符 c=getchar(); d=getchar(); e=getchar(); printf("%c%c%c%c%c\n",a,b,c,d,e); }
输出:
简析
:在用scanf()函数输入字符型数据时要注意,如果用%c格式声明输入字符,那么空格字符和转义字符都作为有效字符输入,因此4和5之间的空格会被赋值给b。其次,要注意数字和数字字符之间的差别。最后,getchar()函数可以接收回车键,把回车也作为一个字符输入。
所以,a是’4’,b是空格,c是’5’,d是回车符(换行效果),e是’6’。(7 没有被赋值给任何变量)即为输出的效果。