2011-12-17 34 views
2

ユーザーがEnterキーを押したときにプログラムが終了しようとしています。何らかの理由で動作しないようです。 「char cはキーを入力するのと同じではない」を使用すると、c(最後に入力された整数)の余分な整数が取り込まれます。このコードの問題は何ですか?Enterキーでプログラムを終了

#include <stdio.h> 
#include <stdlib.h> 
#define framenumber 4 

int test1 =0; 
int test2=1; 
int main(void) 
{ 
    int mainarray[framenumber][2] = {0}, nHP = 3, takein, iPT; 
    char c = getchar(); 
    printf("Enter: "); 
    while(1) 
    { 
     char c = getchar(); 

     if(c == '\n') { 
      printf("here"); 
     } 
     else 
     { 
      printf("not enter\n");   

      takein = atoi(&c); 

      for (iPT = 0; mainarray[iPT][test2] != takein && iPT < framenumber; iPT++); 

      if (mainarray[iPT][test2] != takein) 
      { 
       //search for a victim 
       do { 
        nHP = (nHP + 1) % framenumber; 
       } while (!(mainarray[nHP][test1] == 1 ? mainarray[nHP][test1] = 0 : 1)); 
       //update the page table 
       mainarray[nHP][test1] = 1; 
       mainarray[nHP][test2] = takein; 
      } 
      else 
      { 
       mainarray[iPT][test1] = 1; 
      } 

      puts("page table:"); 
      for (iPT = 0; iPT < framenumber; iPT++) 
      { 
       printf("%s %d, %d.\n", iPT == (nHP + 1) % 4 ? ">": " ", mainarray[iPT][test1], mainarray[iPT][test2]); 
      } 
      putchar('\n'); 

      printf("Enter: "); 
     } 
    } 
    return 0; 
} 
+0

どのオペレーティングシステムでですか?あなたの 'printf'はその形式で改行を終わらせるべきです(そうでなければ' fflush'を使います)。 Linuxでは、tty-sについて読むべきです。端末は1行ずつ読み込まれます... –

+0

Mac OS X。どのように私はfflushを使用するのですか?ありがとう –

+0

MacOSXもUnixシステムですので、http://www.linusakesson.net/programming/tty/index.phpも読んでください。 'fflush(NULL);'を呼び出すことができます。 –

答えて

5

ブロック変数を作成しないでください。 (whileループで)。

char c='\0';  /* initialize with 0 */ 
    printf("Enter: "); 
    while(c!='\n') /* loop terminate condition */ 
    { 
     c= getchar(); /* remove declaration */ 
     if(c =='\n') 
     { 
     printf("here"); 
     } 
     else 
     { 
     getchar(); /* read (eat) an extra input */ 
     printf("not enter\n"); 
    .... 
+0

あなたは男です!どうもありがとう ! –

+0

私は2つ以上の桁の数字を入れたらプログラムは終了します(明らかに私たちはchar()を取得しているので)、これを修正する簡単な方法はありますか? :O –

+0

いいえ、atoiを&cに電話しているためです。 atoiはゼロ終了文字列を期待しています。 –

関連する問題