2016-04-16 15 views
-1

fgets()strtok()を入力してそれに応じて分割するのに問題があります。fgetsとstrtokを使って複数の入力を得るにはどうすればよいですか?

入力1-9を受け入れるメインメニューがあり、すべての入力が別の機能につながっているとします。私はif文とbreak関数ですべての関数を実行しました。文字列、スペース、2 intを取る別のコマンドがあるとしたら、どうすればメニューに書き込むことができますか?

これはメニュー内の任意の時間で、個々のint(1〜9)だけを読み取ることができ、そのメニューに"start 5,9,forward"または"start ,4,2,backwards"と言うことがあります。私は、 "開始"が入力されている場合は続行しますが、起動後に入力されたスペースを読み込み、2の整数と最後の値を読み込むようにする方法はわかりません。文字列。

私の質問がちょっと混乱している場合は申し訳ありませんが、行内に複数の入力を受け取り、それらの入力変数を操作できる場合の例を知りたいだけです。

+0

多分、あなたは 'char buf [256]、* p; fgets(buf、sizeof buf、stdin); p = strtok(buf、 "、");一方、(p){puts(p); p = strtok(NULL、 "、"); } '? –

答えて

1

fgetsstrtokの使用:

それはかなり@Coolガイが言ったことです。

... 
fgets(buff, sizeof buff, stdin); 
char a[25], d[25]; 
int b, c; 
char *p = strtok(buff, ", "); //this will cut the input at an occurrence of `,` or `' '`, whatever happens first. At this point you would have the string "start" pointed by `p`. 
strcpy(a, p); 
p = strtok(NULL, ", "); 
if(p) { 
    b = atoi(p); 
    if(b < 0 || b > 9) { 
     //input error 
    } 
} 
p = ... 

残りは類似しています。

scanfのソリューションを使用する:

あなたは(はい、それは強力な機能です)scanf関数を使用して入力を読み取ることができます。

scanf(" %N[^,' '] ,%1d%*[^,' '] ,%1d , %N[^\n]", a, &b, &c, d); 
" %N[^,' ']"

,又は' '(空白)まで入力を読み取ります到達します。また、Nをサイズa-1に置き換えます。

%1d%*[^,' ']は、1桁の整数を読み取り、,が見つかるまで入力の残りを破棄してbに格納します。

%N[^\n]は、残りの行を読み取り、dに格納します。 Nをサイズd - 1に置き換えます。

scanfで使用できるたくさんのトリックがあります。 この場合、すべての空白はscanf形式の中で重要です。また、ユーザが間違った入力フォーマットを入力した場合は扱っていませんが、可能です。

+1

'fgets'と' strtok'を使って具体的に作業したいなら、私に教えてください。私は自分の答えを編集します。 – ddz

+0

ええ、私はそれがfgetsとstrtokであることを望みます – ProgrammingNoob

+0

@ProgrammingNoob Done。 – ddz

関連する問題