2013-08-04 4 views
0

Я пытаюсь создать программу, которая работает в командной строке, написанной в C выглядит следующим образом:Loop не может остановить

int main(void){ 

    char code[25]; 
    char *fullCmd; 
    char *command; 
    char *extraCmd; 

    bool stop = false; 
    int loop = 1; 

    while (loop == 1){ 

     printf("C:\\>"); 
     scanf("%[^\n]",code); 

     fullCmd = strdup(code); 
     command = strtok(fullCmd, " "); 
     extraCmd = strtok(NULL, " "); 
     handStatement(code, command, extraCmd); 

     if(strcmp(command,"exit\n") == 0 || strcmp(command, "quit\n") == 0){ 
      loop = 0; 
      printf("Program Terminated\n"); 
     } 
    } 

    return 0; 
} 

HandStatement() это одна из моих ручек. Но проблемы здесь в том, что цикл while не остановит меня для ввода другой команды при выполнении handStatement(). Если я не использую while, я могу выполнить одну команду за раз.

+0

Есть сообщение «Программа завершена», когда-либо напечатанной на экране? –

ответ

3

Вам не нужно переводить \n символов в ваш strcmp звонок.

if(strcmp(command,"exit") == 0 || strcmp(command, "quit") == 0){ 
     loop = 0; 
     printf("Program Terminated\n"); 
    } 

Кроме того, вам нужно очистить символы новой строки из стандартного ввода:

while (loop == 1){ 
    printf("C:\\>"); 
    scanf("%[^\n]",code); 
    fullCmd = strdup(code); 
    command = strtok(fullCmd, " "); 
    extraCmd = strtok(NULL, " "); 
    handStatement(code, command, extraCmd); 
    if(strcmp(command,"exit") == 0 || strcmp(command, "quit") == 0){ 
     loop = 0; 
     printf("Program Terminated\n"); 
    } 
    /* Flush whitespace from stdin buffer */ 
    while(getchar() != '\n'); 
} 
+0

спасибо! Это работает! благодаря! – Thangnv

0

Если удалить «\ п» из вашего кода, он будет работать. Если ваш символ окончания не был изменен, он фактически не помещает символ новой строки в строку, и поэтому ваш strcmp() всегда будет возвращать не равным.

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