入力を使用fgets()
およびstrtok()
受信し、それに応じてそれらを分割するのに問題があります。
入力1〜9を受け取るメインメニューがあり、すべての入力が別の機能につながると仮定します。これは、すべての関数でifステートメントとbreakステートメントを使用して行いました。ここで、文字列、スペース、2 intの順に取る別のコマンドがあるとしましょう。メニューにどのように記述しますか?
つまり、メニューではいつでも、個々のint(1〜9)だけを読み取ることができ、letsay"start 5,9,forward"
または"start ,4,2,backwards"
そのメニューでも読み取ることができます。「start」が入力されているかどうかを示すロジックを記述しますか、続行しますが、開始後にスペース入力を読み取り、2つのintと最後のintを読み取るようにする方法がわかりません。ストリング。
私の質問が少し紛らわしい場合は申し訳ありませんが、1行に複数の入力を受け取り、それらの入力変数を操作できる場合の例を知りたいだけです。
fgets
およびを使用するstrtok
:
@CoolGuyが言ったこととほぼ同じです。
...
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桁の整数を読み取り、a,
が見つかるまで残りの入力を破棄して、b
;に格納します。
%N[^\n]
行の残りを読み取り、に格納しd
ます。Nをd
-1のサイズに置き換えます。
scanfで使用できるトリックはたくさんあります。この場合、すべての空白はscanfの形式内で重要であることに注意してください。また、ユーザーが間違った入力フォーマットを入力した場合は扱っていませんが、可能です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加