簡體   English   中英

getch()不響應停止循環

[英]getch() not responding to stop loop

假設存在ncurses標頭,並且我的random_number_generator()方法正在工作。 我試圖通過單擊'a'退出循環(最終我想通過按Ctrl E退出)。

我的代碼繼續按預期每秒打印隨機數。 如果要滿足任一條件,我希望它退出:

  1. 如果隨機數是除數的倍數,它將退出。

  2. 如果我使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM