c语言初级问题,求助,我真的想不出了
#include<stdio.h>#include<conio.h>
void main()
{
int a=0,i,sum=0,b;
for (i=1;i<=1000000;i++)
{
sum=sum+i;
if(kbhit()) //请看这里
{
if(' '==getch())
{
i=1000001;
}
} //到这里为止,这段语句
else
{
printf("%d",i);
}
}
printf("%d",sum);
}
/*****************/
*我想问的就是 上面标识的那段语句我如果单单用
if(' '==getch())
{
i=1000001;
}
这个程序就只能在我们按下一个按键后才执行下面的语句。(就是会有中断)
为什么上面用
if(kbhit())
{
if(' '==getch())
{
i=1000001;
}
}
这样的嵌套语句 他就不会 出现 按下按键 才 执行下面语句的这种情况。(说白了就是没有中断)
这样的嵌套语句就没有中断出现,这是为什么呢
别沉了
:sad:sad:sad:sad:sad:sad:sad:sad:sad:sad 可能说明kbhit()的返回值为0,所以没有进入if-else中的if,而进入了else。 应该不是,我认为是调取中断指令被覆盖了,或者是,啊呀我头脑乱啦#@¥%@#¥%@#!@#¥@!#¥:dizzy::dizzy::dizzy::dizzy::dizzy::dizzy::dizzy::dizzy::dizzy:,可能会汇编的会解释得通 @小甲鱼 {:5_107:}我是来打酱油的,顺便帮楼主顶一下 救命啊,强迫症患者受不了啊~~~~~,我试了反汇编但。。。。。汇编不是很厉害,了解的信息不多啊 键盘缓冲区队列不为空,getch(),会检查键盘缓冲区,缓冲区为空才会停下来等待输入,否则就取走缓冲区队列的第一个元素。
你的程序我没仔细看,大概是上下文中有写缓冲区的代码,而在你的问题代码前没有将缓冲区的剩余数据拿走,所以导致没有中断。你可以试试在getch前面加一个getchar试试。 是写得太乱了没法看吧。。。呜呜~~~~~~,我这就去看看,。。。。。。。。我试了,发现在前面加入getchar()也是一样没有中断,我估计可能kbhit()这个函数 里面有 跳过中断 代码,或者向缓冲区写入了其他东西,使其强制跳转 好吧一切都是我想太多了,呵呵乱了,谢谢大家了 你的意思是按了后的sum直没有加上1000001还是按了不会停止??
我试了会停下来阿!!
会不会是编译器的问题?!!
大牛快来!!
我是来赚鱼币的 kbhit()(VC++6.0下为_kbhit())
功 能及返回值: 检查当前是否有键盘输入,若有则返回一个非0值,否则返回0
用 法:int kbhit(void);
包含头文件: include <conio.h>
getch():
所在头文件:conio.h
函数用途:从控制台读取一个字符,但不显示在屏幕上
函数原型:int getch(void)
返回值:读取的字符
例如:
char ch;或int ch;
getch();或ch=getch();
用getch();会等待你按下任意键,再继续执行下面的语句;
用ch=getch();会等待你按下任意键之后,把该键字符所对应的ASCII码赋给ch,再执行下面的语句
这里因为没有键按下所以kbhit返回0 直接跳出if语句执行else部分
在程序执行过程中自始至终都没有执行
if(' '==getch())
{
i=1000001;
}
而不是没有中断
要执行需要将判断条件改为 !kbhit()
建议你碰到这种问题调试一下就行了 不要动不动就怀疑编译器:titter: 路过 来学习额 来学习啦 来学习滴
页:
[1]