假设存在ncurses标头并且我的random_number_generator()
方法正在运行。我试图通过点击'a'退出循环(最终我想通过点击 Ctrl E 退出)。
我的代码会按照预期每秒继续打印随机数。如果满足任一条件,我希望它退出:
如果随机数是除数的倍数,它将退出。
如果我使用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;
}
修改
我尝试将条件更改为&amp;&amp;相反,但getch仍然不让它退出:
随机数输出范围1-10:
4
a3 <-hit a
aaa4 <-hit a many times
5 <-exits
答案 0 :(得分:2)
由于第一个表达式true second不执行,因此逻辑或运算符||
的{{3}}行为。
random_number % divisor != 0 || (c=getch())!=49
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^
True not get executes
答案 1 :(得分:0)
因为random_number % divisor != 0
是真的,这就是为什么它不关心你输入什么
使用&&
代替
答案 2 :(得分: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,循环终止。
答案 3 :(得分:0)
你的while循环有一个带有两个条件的OR运算符(||),在这种情况下,从左到右执行求值。有两种情况,条件可以为真,一种是如果random_number%divisor == 0,另一种是c = getch()== 49,如果这些条件中的任何一个为真,那么循环将终止,否则它将执行它的下一次迭代。
由于条件评估是从左到右执行的,所以如果while()内的第一个条件为真,则执行下一次迭代,因此只要random_number%divisor == 0,就会执行下一次迭代。 / p>
解决方案:将左边的c = getch()!= 49,使其成为第一个条件并将random_number%divisor!= 0放在右侧,使其成为从左到右的第二个条件。 / p>
答案 4 :(得分:0)
因为在任何给定的输入中,至少满足一个条件,或者(||)继续循环.USe和(&amp;&amp;)代替。
答案 5 :(得分:0)
更改您的操作|| 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;
答案 6 :(得分: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);
答案 7 :(得分:0)
#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("%d\n",random_number);
if(random_number % divisor == 0)
break;
else if(kbhit()){
c = getch();
if(c=='a')
break;
}
else;
sleep(1);
} while(1);
return 0;
}