0

Cで書かれたコマンドラインで実行されるプログラムを構築しようとしていますが、次のようになります。

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()は私のハンドルの 1 つです。handStatement()しかし、ここでの問題は、実行時に別のコマンドを入力するために while ループが停止しないことです。while を使用しない場合は、一度に 1 つのコマンドを実行できます。

4

2 に答える 2

3

呼び出しに末尾\nの文字は必要ありません。strcmp

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

また、stdin から改行文字をフラッシュする必要があります。

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');
}
于 2013-08-04T09:30:26.590 に答える
0

コードから「\n」を削除すると、機能します。終了文字が変更されていない限り、実際には改行文字が文字列に配置されないため、strcmp() は常に等しくない値を返します。

于 2013-08-04T12:11:27.233 に答える