1

ncurses ヘッダーがあり、random_number_generator()メソッドが機能しているとします。「a」を押してループを終了しようとしています(最終的には、を押して終了しますCtrlE)。

私のコードは、意図したとおりに毎秒乱数を出力し続けます。いずれかの条件が満たされた場合に終了させたい:

  1. 乱数が除数の倍数である場合は終了します。

  2. を使えば終了します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
4

8 に答える 8

2

最初の式が true の場合、論理和演算子の短絡動作のため、||2 番目の式が実行されません。

    random_number % divisor != 0  ||  (c=getch())!=49
 // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^      ^
       True                           not get executes       
于 2013-09-05T05:42:46.583 に答える
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;
}
于 2013-09-05T06:54:47.983 に答える
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);
于 2013-09-05T06:09:25.273 に答える
0

本当だからrandom_number % divisor != 0、何を入力してもかまわないのです

&&代わりに使用

于 2013-09-05T05:39:17.790 に答える
0

任意の入力で少なくとも条件が満たされ、or(||) がループを継続するため、代わりに and(&&) を使用します。

于 2013-09-05T05:47:51.253 に答える