2011-12-17 52 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。終端是逐行讀取的... – 2011-12-17 08:25:43

+0

Mac osx。我如何使用fflush?謝謝 – 2011-12-17 08:27:51

回答

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"); 
    ....