goto语句遇到的问题 回车/换行

问题:

#include "stdio.h"
main()
{
char ch1;
step1:
scanf("%c",&ch1);
   printf("%d\n",ch1);
goto step1;
}
但运行结果,会在后面出现10,怎样才能去掉这个10?

解决:

PC机的操作系统的功能实际执行输入时,所有从键盘上打进去的字符,总是先暂存在缓冲区中,并不交给程序,非要遇到一个Enter键,才将缓存区中的一批字符交给程序作输入处理。
而打Enter键时,实际上已经在缓存区中存入了两个字符:“回车号”('\r',ASCII码为13)、“换行号”('\n',ASCII码为10)。
然后,C语言在输入处理时,是将键盘输入当成一种“文本文件”来处理的。
而目前PC机的大多数C语言版本中,对“文本文件”处理时规定:凡输入时遇见连续两个字符“回车号”、“换行号”时,丢掉“回车号”,只处理“换行号”。

所以,你如果连续敲<A>、<B>、<C>、<Enter>四个键,
操作系统的缓存中是'A'、'B'、'C'、'\r'、'\n'五个字符,
C编译交给应用程序作为输入的是'A'、'B'、'C'、'\n'四个字符,
然后,printf("%d\n",ch1);将字符的ASCII码当整数输出,就成了65,66,67,10四个整数。

可知,这个现象是操作系统和C语言的某些规则决定的。您必须知道这些规则,然后按照实际需要来编程序。例如,若不想输出这个“换行号”,可以用
while ( scanf("%c",&ch1), ch1!='\n' ) printf("%d\n",ch1);
来取代上述循环。
当然,这样改后的循环和您原来的有所不同,您原来是无限循环而这里是循环到<Enter>键为止。如果不合您的希望,可以再改,例如
step1:
scanf("%c",&ch1);
if(ch1!='\n' ) printf("%d\n",ch1);
goto step1;
或者用 fflush(stdin); 清掉enter键:
step1:
scanf("%c",&ch1);
fflush(stdin);
printf("%d\n",ch1);
goto step1;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值