c语言中中getch()函数为何不起作用?

为了穷尽10个8之间只用加减剩除,而不用括号连接,所得的结果。因为我要在其中搜索某些结果,比如80,64,743,998等能不能被构造出来。我编制了如下程序,虽然可以得出所有的组合结果,但是即使我我在最后加一个getch();程序运行一会儿也会直接结束。以前我用getch()都能挺,怎么这儿没挺呢。难道是这儿的计算量太大了吗?????
程序如下:
#include<stdio.h>
void main()
{
float b[10],sum=0;
int i,p,m,a[10],c[10];
a[0]=1;b[0]=8;
for(a[1]=1;a[1]<=4;a[1]++)
for(a[2]=1;a[2]<=4;a[2]++)
for(a[3]=1;a[3]<=4;a[3]++)
for(a[4]=1;a[4]<=4;a[4]++)
for(a[5]=1;a[5]<=4;a[5]++)
for(a[6]=1;a[6]<=4;a[6]++)
for(a[7]=1;a[7]<=4;a[7]++)
for(a[8]=1;a[8]<=4;a[8]++)
for(a[9]=1;a[9]<=4;a[9]++)
{ for(i=0;i<=9;i++)c[i]=a[i];
for(i=1;i<=9;i++)
{if(a[i]==1||a[i]==3)b[i]=8;
else if(a[i]==2){b[i]=-8;a[i]=1;}
else {b[i]=1/8.0; a[i]=3;}
}
for(i=0;i<=9;i++)
{ m=i;
while(a[i]==3)i++;
for(p=m;p<i;p++)
{b[m-1]=b[m-1]*b[p];
b[p]=0;
}
}
for(i=0;i<=9;i++)
sum=b[i]+sum;
printf("%0.1f",sum);
for(i=0;i<=9;i++)a[i]=c[i];
sum=0;
}
getch();
}
感激不尽呀!解决加分.... 加conio.h我试了,效果一样。主要的循环不在while中,while只是求对应一组符号的和值。说下算法的思路:用a[10]记录各个8的符号,用1 2 3 4 代表加减剩除。外面的很多个for就是给每一个a[i]赋值。再根据a[]确定b[] 如果a[i]是符号或者除号将b[i]确定为-8 1/8 相应的a[i]该为正号和剩号,a[i]为加剩 则b[i]为8 a[i]不变 这样a[i]中只有正号和剩号 然后搜索剩号 把有剩号连接的b[i]中最小的b[i]为他们的和 而其他用0代替 (如b1*b2*b3 则b1=b1*b2*b3 b2=0 b3=0) 最后把b[0]到b[9]加起来就求出 一组a[]所确定的结果。然后外层改变a[] 进入继续判断...... 顶起来!

你共犯了三点原则性的错误!
第一点:
你既然用了getch()函数,在前面就应有头文件#include<conio.h>。因为:
conio是Console Input/Output(控制台输入输出)的简写,其中定义了通过控制台进行数据输入和数据输出的函数,主要是一些用户通过按键盘产生的对应操作,比如getch()函数等等。
包含的函数
cgets(char *);
cprintf(const char *, ...);
cputs(const char *);
cscanf(const char *, ...);
inp(unsigned short);
inpw(unsigned short);
getch(void);
getche(void);
kbhit(void);
outp(unsigned short, int);
outpw(unsigned short, unsigned short);
putch(int);
ungetch(int);
void _Cdecl clreol (void);
void _Cdecl clrscr (void);
void _Cdecl delline (void);
int _Cdecl gettext (int left, int top, int right, int bottom,
void *destin);
void _Cdecl gettextinfo (struct text_info *r);
void _Cdecl gotoxy (int x, int y);
void _Cdecl highvideo (void);
void _Cdecl insline (void);
void _Cdecl lowvideo (void);
int _Cdecl movetext (int left, int top, int right, int bottom,
int destleft, int desttop);
void _Cdecl normvideo (void);
int _Cdecl puttext (int left, int top, int right, int bottom,
void *source);
void _Cdecl textattr (int newattr);
void _Cdecl textbackground (int newcolor);
void _Cdecl textcolor (int newcolor);
void _Cdecl textmode (int newmode);
int _Cdecl wherex (void);
int _Cdecl wherey (void);
void _Cdecl window (int left, int top, int right, int bottom);
har *_Cdecl cgets (char *str);
int _Cdecl cprintf (const char *format, ...);
int _Cdecl cputs (const char *str);
int _Cdecl cscanf (const char *format, ...);
int _Cdecl getch (void);
int _Cdecl getche (void);
char *_Cdecl getpass (const char *prompt);
int _Cdecl kbhit (void);
int _Cdecl putch (int c);
int _Cdecl ungetch (int ch);

第二点:
你没弄清getch()的用法。谨记如下:
getch直接从键盘获取键值,不等待用户按回车,只要用户按一个键,getch就立刻返回,getch返回值是用户输入的ASCII码,出错返回-1.输入的字符不会回显在屏幕上.getch函数常用于程序调试中,在调试时,在关键位置显示有关的结果以待查看,然后用getch函数暂停程序运行,当按任意键后程序继续运行.
第三点:
本次提问没有说清楚你编的程序想要干什么?

参考资料:

温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-07-30
那就改改,把程序写道while循环里,设定按某个键结束循环,就行了。

你没明白我的意思,我是说在main()里写个while循环,将你所写的代码复制到这个循环里,因为是死循环所以即使不锁屏,也不会关闭,因为程序除非终止否则永不结束。

再写个scan,接收字符,通过按特定键即可退出程序。
第2个回答  2009-07-29
跟计算量没有关系。
我试过,可以呀。等待输入然后结束。
第3个回答  2009-07-28
不停撒
死循环
VC++6.0中
getch()函数头文件在conio.h中
你在前面加个头文件
#include<conio.h>试试
第4个回答  2019-01-16
getch ()即使不按下字符也会返回
相似回答