2016-10-08 4 views
0

ここでは、私がしたいことがあります: ユーザーはプロンプトでコマンドを入力する必要があり、プログラムは何をすべきかを知るためのコマンドを評価します。 このコマンドが見つからない場合、シェルは「コマンドが見つかりません!」というエラーを返します。 ユーザーがEXITコマンドを入力すると、プログラムは終了します。 簡単にするために、ユーザーが入力しないでEnterキーを押したときの問題を回避するために、ユーザーは常に何かを入力すると仮定します。 空の文字列は使用されません。私はここでループを備えた、これは私が何をしたいですにすべきである:シェルコマンドを評価するCプログラムを書く方法

例:

SHELL.EXE

シェル>テスト

コマンドが見つかりません!

シェル> test2

コマンドが見つかりません!

シェル>終了

>

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

int main() 
{ 
    char command[20]; 

    while (command != "exit") { 

     //check with an if statement for valid commands 
     printf("Enter a command:\n"); 
     gets(command); 
    } 

    if (command == "exit") { 
     //program should exit 
    } 

    return 0; 
} 
+3

「==」でC文字列を比較することはできません。 – tkausl

+1

私はそれをする方法がわからないことを知っています –

+2

文字列を比較するには、cライブラリ関数の1つが必要です。 https://www.tutorialspoint.com/c_standard_library/c_function_strcmp.htm – drescherjm

答えて

-1

使用popen()またはsystem()のいずれか。 Popenはシステムがたわごとをしている間にI/Oのハンドラを与えますが、コマンドライン上のパイプ( "<"と ">")にリダイレクトしてそこからあなたの道を読み書きすることができます。

+0

I '本当に確かではありませんが、system()でI/Oの書き込みとしてwrite(0、&datatowrite、quantofbytestowrite)を実行すると動作します。 –

-1

whileループを使用すると、コマンド配列に文字列値を渡す必要があります。これにより、ループ状態でチェックすることができます。

char exit[4] = "exit"; 
gets(command); 


if (strcmp(command,exit) == 0) 
{ 
    //Exit programm 
} 
while (strcmp(command,exit)) != 0) 
{ 
    printf("Command not found!"\n Enter a command \n); 
    gets(command); 
    if (strcmp(command,exit) == 0) 
    { 
     //Exit programm 
    } 
} 
関連する問題