C语言使用goto语句遇到的问题

这样一个程序:/*Note:YourchoiceisCIDE*/#include"stdio.h"main(){charch1;l:scanf("%c",&ch1);pr... 这样一个程序:
/* Note:Your choice is C IDE */
#include "stdio.h"
main()
{
char ch1;
l:scanf("%c",&ch1);
printf("%d\n",ch1);
goto l;

}
但运行结果,会在后面出现10
怎么才能去掉这个10?本人是初学者,请高手们帮忙!!
展开
 我来答
haolizhong4924
2012-02-01 · TA获得超过5217个赞
知道小有建树答主
回答量:600
采纳率:50%
帮助的人:258万
展开全部
10是“换行号”的ASCII码。“换行号”在C语言中可以表示为'\n'。

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>键为止。如果不合您的希望,可以再改,例如
l:scanf("%c",&ch1);
if(ch1!='\n' ) printf("%d\n",ch1);
goto l;
L_o_o_n_i_e
2012-02-01 · TA获得超过4.2万个赞
知道大有可为答主
回答量:8507
采纳率:38%
帮助的人:5115万
展开全部
用 fflush(stdin); 清掉enter键:
l:scanf("%c",&ch1);
fflush(stdin);
printf("%d\n",ch1);
goto l;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
451006071
2012-02-01 · TA获得超过1332个赞
知道小有建树答主
回答量:368
采纳率:57%
帮助的人:325万
展开全部
你那个10就是换行符'\n'因为ENRTER键按下产生2个字符一个数'\n'换行 一个是'\r'回车不换行..
而'\r'系统帮你吃掉了,而'\n'是要自己处理的,这是C i/o的问题;所以改成
#include <stdio.h>
int main()
{
char ch1;
l:scanf("%c%*c",&ch1);//%*c表示后面有一个字符自动略去即那个'\n'
printf("%d\n",ch1);
goto l;
return 0
}
或者
#include <stdio.h>
int main()
{
char ch1;
l:scanf("%c",&ch1);//%*c表示后面有一个字符自动略去即那个'\n'
getchar();//把那个换行符吃掉
printf("%d\n",ch1);
goto l;
return 0
}
注意我给出的才是标准形式,你写的那个是错的....有的标准编译器#include"stdio.h"通不过的因为意义不同
楼下的fflush(FILE*);也行,但是初学者不建议使用...是清理缓冲区的一个函数.有这个有点大材小用,用个getchar()就够了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
创作者GsVvM6R8r6
2012-02-01 · 超过19用户采纳过TA的回答
知道答主
回答量:55
采纳率:0%
帮助的人:34.5万
展开全部
题目是什么?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
great0130
2012-02-01
知道答主
回答量:6
采纳率:0%
帮助的人:3.6万
展开全部
我也互不!!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式