[英]getch() not responding to stop loop
假設存在ncurses標頭,並且我的random_number_generator()
方法正在工作。 我試圖通過單擊'a'退出循環(最終我想通過按Ctrl E退出)。
我的代碼繼續按預期每秒打印隨機數。 如果要滿足任一條件,我希望它退出:
如果隨機數是除數的倍數,它將退出。
如果我使用getch()
,它將退出。 我認為這應該工作,但它沒有退出時,我打一個 。
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,則第二個表達式不執行。
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運算符(||),在這種情況下,評估從左至右執行。 在兩種情況下條件可以成立,一種是如果random_number%divisor == 0,另一種是c = getch()== 49,如果這些條件之一成立,則循環將終止,否則它將執行下一次迭代。
由於條件評估是從左到右執行的,因此,如果while()內部的第一個條件為true,則將執行下一次迭代,因此,每當random_number%divisor == 0時,都將執行下一次迭代。
解決方案:將c = getch()!= 49放在左側,使其成為第一個條件,將random_number%divisor!= 0放在右側,從左至右使其成為第二個條件。
因為在任何給定的輸入中,至少滿足on條件並且or(||)繼續循環。
更改操作|| to &&
|| 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("%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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.