2016-09-23 15 views
0

Cで、2つの異なる値( )を入力し、これらの2つの値を別々に1つのユーザーエントリに格納するように促す方法があるのだろうかと思います。たとえば:Cでは、1行のコマンドラインプロンプトから複数のユーザー入力を受け取る方法はありますか?

Enter your age and blood type : 34 AB 

はその後、我々は別に

fgets(string,string, 64, 64, stdin); 

のような2 entiesは明らかにこれは動作しませんが、私はC(2と非常に新しいですC.で可能な方法がある保存します日々)。私はJavaで、メインとグラブのコマンドラインエントリで定義されたargs []をインデックスで使うことができることを知っています。ここで、ユーザ入力の各スペースはargs配列内の別の要素になります。

+0

scanf()関数(およびその兄弟)を確認します。私のCはちょっと錆びているので、私の腕を例にしてチャンスを与えません。 – Mick

+0

[コマンドライン引数](http://stackoverflow.com/documentation/c/1285/command-line-arguments#t=201609230546311317197) – BLUEPIXY

+0

"はい、多くのプログラムが実行します"。 – user2864740

答えて

8

argsです。

scanf("%d %s", &age, blood_type);のようにscanfを使用することもできます。

fgets(line, sizeof line, stdin); 
sscanf(line, "%d %s", &age, blood_type); 

上記のコードのより完全なバージョンを、エラーチェックで:ユーザ入力を処理するとき

第三の、及び通常推奨される方法は、同様に、入力を分析からの入力を分離することである

char line[100]; 
int age; 
char blood_type[100]; 
if (fgets(line, sizeof line, stdin) == NULL || 
    sscanf(line, "%d %s", &age, blood_type) != 2) { 
    fprintf(stderr, "Couldn't read age and blood type. Sorry.\n"); 
    exit(EXIT_FAILURE); 
} 

lineは文字列の最後を示す「\ 0」を加えたものなので、変数blood_typeにはオーバーフローがありません。それ以外の場合は、blood_typeに入れることができる文字数を制限するために、%sの代わりに%99sを使用できます。

+1

解析エラーがあると、入力変数は変更されずに残されているため(UBにつながる可能性があるため、初期化されていない可能性があるため)、* scanf *の結果を確認するメモを追加します。また、長いユーザー入力によるバッファオーバーフローを避けるために、*%s *のバッファサイズの指定に関する注意を追加します。 – hyde

-1

従来の名前がint main(int argc, char **argv)のように、argv(引数ベクトル)ですが、これまでで最高の方法は、あまりにもCの主な作品に

char string[100]; 

if (fgets(string, sizeof(string), stdin) != NULL) { 
    // split the string here to extract the "n" values 
} 
+0

あなたは実際に質問に答えません。 –

+0

@IngoBürkなぜですか?あなたは私にコードを与えることを望みますか?問題は、単一の行を読み込み、複数の値を抽出できるかどうかです。私は答えたと思う。 –

+0

質問には明らかに*複数の引数を分ける方法が含まれています。弁護士に質問をしようとすると、ここで私のdownvoteを削除するつもりはありません。 –

-1

1つの追加オプション(ご使用の環境によって異なります) - man getopt

+0

http://stackoverflow.com/questions/39653362/in-c-is-there-a-way-to-take-multiple-user-inputs-from-one-line-command-line-pro#comment66610200_39653362 – alk

関連する問題