1

ループ内で入力を取得しようとしています。入力が停止したことをどのように知ることができますか? たとえば、私が持っていint inputて、ユーザーが望む限り入力を取り入れているとします。ただし、各エントリの前にプロンプ​​トを表示するわけではありません。ユーザーにこれ以上入力があるかどうかを尋ねているわけではありませんし、入力の数を事前に知っているわけでもありません。

入力の取り込みを停止するにはどうすればよいですか?

これが私が今まで持っているものです。

while(1){
    scanf("%d",&input);
    if(conditionFulfilled)
        index=0;

    if(index)
        printf("%d",input);
}

ここでは、条件を満たさない限り、すべて印刷します。しかし、条件が満たされると、入力を取り続けますが、出力しません。入力が停止したことをどのように知ることができますか?

私は今、自分自身をより明確にしようとします。

私がやりたいことは、ユーザーに数字を入力し続けてもらいたいということです。今はそれらの数字を同じ順序で印刷したいのですが、ユーザーが50を超える数字を入力したら、それとその後の数字を印刷したくありません.

また、この上記の条件が達成されたら、ユーザーが入力を停止することを望んでいません。また、ユーザーがこれ以上番号を入力したいかどうかを毎回尋ねることができますか? 私はただ彼に入り続けてもらいたいだけです、そして彼が終わったら。目的の印刷出力が得られるはずです。

しかし、ユーザーがすべての入力を完了したかどうかをどうやって知ることができるのかわかりません。

newLine は文字に格納されますが、整数入力には格納されないため、入力を文字として格納できると考えていました。すなわちscanf("%c",&input)\n文字を保存しますがscanf("%d",&input)、すべての newLines を無視する場合は、2 つの連続した改行をチェックできるようになり、停止します。

うーん、それが正しい方法かどうかはわかりませんか?

また、入力してから Enter キーを押すと、 44 が入力ストリームにあり、enter両方とも入力ストリームにあるとします。この入力ストリームを newLine 文字でクリアし、変数に 4 を取り込むにはどうすればよいでしょうか? 今はもっと理にかなっていると思いますか?

編集: 上記の解決策は機能しないと思います。入力を取り込んでいるcharと処理できない22ため、最初の 2 つだけを取得し、もう 1 つをバッファに残すだけです。

4

3 に答える 3

0

ユーザーに次のようなことをさせたい場合:

5<enter>
16<enter>
3<enter>
...

彼らが望んでいる限り、いつ完了したかはわかりません。単一の入力をループしているので、これがあなたが話しているケースだと思います。

この場合、「enter -1 to stop」などの終了シーケンスによって、または事前に入力数を設定して「enter 10 values」によって、ユーザーの終了状態を設定する必要があります。

ただし、次のように、任意の数の値を一度に受け入れたい場合:

5 16 3 ... <enter>

次に、値を文字列に読み取り、scanf()トークン文字 (この場合はスペース) で区切ることができます。これを行いたい場合は、ループは必要ありません。


コード conditionaFulfilled が の入力であり、入力0時にブレークしたいとしましょう-1:

while(1){
scanf("%d",&input);
if(input == 0)
  index=0;
else if(input == -1)
   break;  
if(index)
printf("%d",input);
}

これで、コードは を入力するまで数値の入力と出力を続けます。0この時点で数値を取得し続けますが、入力が になるまで数値を使用しません-1


あなたの編集に基づいて編集:

Well, I am not sure if it is the right way?
「正しい方法」は本当にありません。それはあなたのプログラムなので、あなた次第です。私の回答の最初の部分でこれを説明しています。入力をどのように取得するかを定義する必要があります。一度に 1 つずつ数字を入力しますか? それらをすべて 1 行にまとめますか? それはあなた次第です!

Edit: I guess the above solution wont work, since if I am taking in the input as char I wont be able to process 22 since It will just take the first 2 and leave the other one in buffer only.
いいえ、あなたのコードはそれらを整数として取っています%d。あなたがそれらを文字として取っていたなら%c、はい、あなたは取るために特別な作業をしなければならない複数桁の数字が正しいです:

ユーザーが入力22<enter> すると、改行まで文字を取得してループする必要があり、次のように数字をシフトする必要があります。

2 * 10^1 + 2 * 10 ^0 = 22

Also, say if I enter 4 and then hit enter, now 4 and enter both are on the input stream, now how can I clear this input stream for the newLine character, and just take in 4 in my variable?

を介して数字のみを読み取る場合はscanf("%d", &input)、改行文字について心配する必要はありません。

それが役立つことを願っています。

于 2012-12-10T18:58:32.020 に答える
0

ループ内で使用getchar()し、入力のターミネータとして使用する方が適切です (ただし、入力を格納するのに十分なサイズのバッファがあることを確認してください)。whileCTRL+DEOF

入力が size よりも小さい場合はrealloc、新しいサイズを使用できます。そのようにして、スペースを節約できます。

于 2012-12-10T18:48:56.337 に答える
0

入力が次のような場合に最初の 2 つの入力のみを取得することに満足している場合は、次のよう20 20 foo 30にします。

while( scanf( "%d", &input ) == 1 )

ただし、合理的なプログラムでは、無効な入力をより適切に処理する必要があります。

于 2012-12-10T18:54:29.410 に答える