getch()未响应停止循环
getch() not responding to stop loop
假设ncurses头在那里,并且我的random_number_generator()
方法正在工作。我试图通过点击"a"退出循环(最终我想通过点击CtrlE退出)。
我的代码继续按预期每秒打印随机数字。如果满足以下任一条件,我希望它退出:
-
如果随机数是除数的倍数,它将退出。
-
如果我使用
getch()
,它将退出。我认为这应该有效,但当我点击a时,它不会退出。int main(int argc, char *argv[]){ int lowest = atoi(argv[1]); int highest = atoi(argv[2]); int divisor = atoi(argv[3]); int random_number; srand((unsigned)time(0)); int c; do { random_number = random_number_generator(lowest, highest); cout << random_number << endl; sleep(1); } while(random_number % divisor != 0 || (c=getch())!=49); return 0; }
编辑:
我试着把条件改成&;但是getch仍然不让它退出:
随机数输出范围1-10:
4
a3 <-hit a
aaa4 <-hit a many times
5 <-exits
由于逻辑或运算符||
的短路行为,如果第一个表达式true second不执行。
random_number % divisor != 0 || (c=getch())!=49
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^
True not get executes
因为random_number % divisor != 0
是真的,所以它不在乎你输入什么
使用&&
代替
无论何时使用条件,都要确保所有部分都按预期运行。
为了更清楚,你应该更好地使用:
do
{
random_number = random_number_generator(lowest, highest);
cout << random_number << endl;
sleep(1);
} while(random_number % divisor != 0 && (c=getch())!='a');
现在,如果输入"a",则第二个条件为false,循环终止。
while循环有一个带有两个条件的OR运算符(||),在这种情况下,求值是从左到右执行的。有两种情况下,条件可以为true,一种是如果random_number%除数==0,另一种是c=getch()==49,如果这两个条件中的任何一个为true,则循环将终止,否则将执行下一次迭代。
由于条件求值是从左到右执行的,因此如果while()中的第一个条件为true,则执行下一次迭代,因此无论何时random_number%除数==0,都将执行下一个迭代。
解决方案:放入c=getch()!=49在左侧,使其成为第一个条件,并将random_number%除数=0在右侧,使其成为从左到右的第二个条件。
因为在任何给定的输入中,至少满足一个条件,或者(||)继续循环。USe和(&&)。
更改操作|| to &&
,并使c=getch()!=49
首先控制。您可以看到下面的示例;
int lowest = atoi(argv[1]);
int highest = atoi(argv[2]);
int divisor = atoi(argv[3]);
int random_number;
srand((unsigned)time(0));
int c;
do
{
random_number = random_number_generator(lowest, highest);
cout << random_number << endl;
sleep(1);
} while((c=getch())!=49 && random_number % divisor != 0);
return 0;
char c;
do
{
random_number = random_number_generator(lowest, highest);
cout << random_number << endl;
if(random_number % divisor == 0)
break;
else if((c=getchar())=='a')
break;
else;
sleep(1);
} while(1);
#include <stdio.h>
#include <conio.h>
int main(int argc, char *argv[])
{
int lowest = atoi(argv[1]);
int highest = atoi(argv[2]);
int divisor = atoi(argv[3]);
int random_number;
srand((unsigned)time(0));
char c;
do
{
random_number = random_number_generator(lowest, highest);
printf("%dn",random_number);
if(random_number % divisor == 0)
break;
else if(kbhit()){
c = getch();
if(c=='a')
break;
}
else;
sleep(1);
} while(1);
return 0;
}
- 如何循环打印顶点结构
- 如何在C++中从两个单独的for循环中添加两个数组
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 正在尝试了解输入验证循环
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 循环后如何继续阅读
- Ardunio UNO解决了多个重叠的定时器循环
- Eigen如何在容器循环中干净地附加矩阵
- 在某些循环内使用vector.push_back时出现分段错误
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 为什么我的for循环不能正确获取argv
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- while循环中while循环的时间复杂度是多少
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- while 循环对非整数的响应很奇怪
- QT 不使用 while 循环进行响应
- 在 y/n 响应后保存 while 循环信息
- 第二个无效响应在我的验证循环中被接受
- getch()未响应停止循环
- c++的do while循环没有响应