2011-12-17 5 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. Терминал считывается по строкам ... –

+0

Mac osx. как я могу использовать 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

Программа заканчивается, если я ставлю два или более цифр (очевидно, поскольку мы делаем get char()), любой простой способ исправить это? : O –

+0

Нет, потому что вы звоните в atoi on & c. atoi ожидает строку с нулевым завершением. –

Смежные вопросы