2017-02-07 16 views
-2

Моя программа должна выйти, когда пользователь вводит в exit аналогично тому, как это делается в оболочке. Сначала я проверил онлайн, чтобы узнать, может ли syscall вызываться в цикле, но затем я заметил, что индексы символов в массиве ошибочны. Почему они меняются; когда я запустил программу и набрал exit, у меня была программа, из которой 3-й индекс вывел для тестирования, и он вернул «e». Поэтому я подумал, что это может быть перевернуто и перевернуло все значения, и мой выход все еще не работает. Любые мысли о том, что может быть основной проблемой?Почему мой код не заканчивается в цикле при проверке строки 'exit'?

#include <stdio.h> 

//Abstract: This program runs a script to emulate shell behavior 
#define MAX_BIN_SIZE 100 
int main() {  //Memory allocation 
char * entry[MAX_BIN_SIZE]; 
    while(1) 
    { 

    printf("msh>"); 

    fgets(entry,MAX_BIN_SIZE,stdin); //Getting user input 


    if(entry[0]=='t' && entry[1]=='i' && entry[2]=='x' && entry[3]=='e') 
     { 
       //printf("Exiting"); 
       exit(0); //exit(system call) 
       break; 
       printf("Inside of exit"); 
     } 
    printf("msh> you typed %s %c %c %c %c",entry,entry[3],entry[2],entry[1],entry[0]); //returning user input            
    } 
return 0; 
} 
+0

Что сделало запись, когда вы посмотрели с помощью отладчика? Вы проверяете, что у него есть «tixe», он, вероятно, не содержал этого. (И что сказал BLUEPIXY) – pm100

+1

'char * entry [MAX_BIN_SIZE];' -> 'запись char [MAX_BIN_SIZE];' – BLUEPIXY

+4

Вы должны были получить предупреждения о компиляторе, намекая на то, где этот код неверен. Читай их. Они важны. – user2357112

ответ

1

Прошу прощения, у меня недостаточно очков репутации, чтобы добавить комментарий, но @lundman правильный. Я не думаю, что вам нужно создать указатель на запись. Кроме того, вы проверяете «выход» в обратном порядке. Я пробовал и редактировал код; это, похоже, работает:

#include <stdio.h> 

//Abstract: This program runs a script to emulate shell behavior 
#define MAX_BIN_SIZE 100 
int main() 
{  //Memory allocation 
    char entry[MAX_BIN_SIZE]; 
    while(1) 
    { 

     printf("msh>"); 

     fgets(entry,MAX_BIN_SIZE,stdin); //Getting user input 


     if(entry[0]=='e' && entry[1]=='x' && entry[2]=='i' && entry[3]=='t') 
     { 

      printf("Inside of exit");//printf("Exiting"); 
      exit(0); //exit(system call) 
     } 
     printf("msh> you typed %s %c %c %c %c\n",entry,entry[3],entry[2],entry[1],entry[0]); //returning user input 
    } 
    return 0; 
} 
+0

Вы можете использовать 'string.h', а затем упростить do' if (strstr (entry, «exit»)) ', чтобы увидеть, включен ли выход в строку ввода, если вам нужно, чтобы слово exit было в начале, затем проверьте если результат strstr указывает на то же место, что и запись. Просто кажется немного чище. – ridecar2