急!!在线等!!帮我看一下我的两个C语言程序是不是一样的?

来源:百度知道 编辑:UC知道 时间:2024/06/05 19:06:10
第一个:
#include"conio.h"
main()
{
char ch;
clrscr();
do
{
scanf("%c",&ch);
if(ch!='@')
printf("123");
else break;
}while(1);
}
第二个:
#include"stdio.h"
#include"conio.h"
main()
{
char ch;
clrscr();
while((ch=getchar()!='@'))
{
printf("123");
}
}
请问,我的两个程序是不是等同的,我上机试了的,结果好像是一样,但是不确定,请高手指点。还有,但我输入其它非“@”字符时,为什么显示的是123123,我觉得应该显示“123”,麻烦帮我解释一下。

一样的
其实你用这个程序时是输入了两个字符的所以就输出“123123”啦
以第一个为例

假如先输入b就输出一个123你下一个按的应该是回车吧哈哈我猜的准吧o(∩_∩)o...
你要不按回车怎么能出来呢!!
回车就相当于第二个字符所以就“123123”啦
不知道能明白否?

第一个 while(1); 是再print 直接去掉while(1); 的(1)

getchar有一个int型的返回值.当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).当用户键入回车之后,getchar才开始从stdin流中每次读入一个字符.getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1,且将用户输入的字符回显到屏幕.如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取.也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键.

应该是这个原因吧,好几年没碰过C了。。