問題タブ [fflush]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - fflush(stdin) は、cygwin の gcc でコンパイルされた場合は機能しませんが、Visual Studio 2010 でコンパイルされた場合は機能します
私はプログラミングを (再) 学習しており、C から始めました。私の IDE (そう言えば) は cygwin (32Bit) と Visual-Studio 2010 で、どちらも Windows7 で動作します。私は常に、VS2010 コンパイラだけでなく、gcc (cygwin) で記述したコードをコンパイルしています。そうするのは、それが良い学習方法だと思うからです。とにかく、fflush(stdin)、つまり stdin バッファのフラッシュについて学びました。そうでなければ、scanfを使用するのは面倒に見えるので、良い機能のようです。そこで、教科書の例に基づいて以下のコードを書きました。cygwin の gcc と VS2010 の両方でコンパイルできます。VS コンパイル済みプログラムを実行すると正常に動作します (s.below)。gcc コンパイル済みプログラムを cygwin で実行すると、fflush(stdin) は stdin バッファーをフラッシュしません (s.below)。場合によっては fflush(stdin) の動作が未定義であるというスレッドをいくつか読みました。それが何を意味するにせよ、C for Linux Programming の教科書から引用しました。fflush(stdin) が stdin バッファー内のものを取り除く有効な手段ではない場合、他にどのような標準的な方法がありますか?
回答ありがとうございます。
== Windows で実行されるプログラム:
== Cygwin で実行されるプログラム:
==コード====
c - 永久ループの実装に問題がある
プログラムを初めて実行したときは機能しているようですが、何らかの理由で、ユーザーに CD を入力するかどうかを尋ねるオプションがスキップされているようです...何か助けてくださいありがとうございます。
c - fflush() が正しくフラッシュしない
C で非常に単純なプログラム実行タイマーを作成しています。以下にサンプル コードを示します。問題は、プログラムを+ (つまりシグナル)で終了するときに、 からfflush(NULL)
すべてをフラッシュしないことです。メッセージの後にまだ時々表示されるのですが、なぜだろうと思います。"Hello World\n"
stdout
CtrlCSIGINT
Estimated running time...
タイマー.c
タイマー.h:
timerTest.c
c - fflush はシグナルハンドラから呼び出されても安全ですか?
まあ、タイトルはそれのほとんどを言います。
アプリケーションが stdout/file にログを記録しているとします。ただし、終了時に常に完全にフラッシュされるとは限りません。解決策の 1 つは、各ログ記録アクションの後にフラッシュすることですが、これではプログラムの速度が許容できないほど遅くなりました。
したがって、問題は、fflush(file)
シグナル ハンドラーから呼び出されても安全fflush(NULL)
かどうかです。
そうでない場合は、理由を教えてください。この問題に対する他の解決策はありますか? ファイル処理ルーチンに参加していないことを知っていれば、おそらく安全ですか?
c - 適切な char の処理
gcc を使用して Linux にコンパイルする場合、ユーザーが何らかの回答を入力するたびに、プログラムは別の反復でコードの同じ部分に到達しますが、ユーザーの入力を待たず、代わりに scanf 関数に改行をフィードします。 program print 'わかりません!' 毎回...プログラムは動作しますが、それでも、ユーザーの回答とは関係なく、「わかりません!」と書きたくありませんでした。これがコードの特定の部分です。
これらは宣言です:
char v[64];
char ans;
(この do..while ループは 'for' 内にあります) さらに困惑するのは、プログラムが Windows で期待どおりにコンパイルおよび実行されるという事実です... (MinGW を使用) fflush(stdin を使用してみました) scanf の前および/または後ですが、役に立ちませんでした。重要な観察は、最初にこの質問に到達したときに期待どおりに動作することです。
(ユーザーが答える前に)
回答: (y/n)
わかりません! // これは毎回書き込まれますが、最初の答え: (y/n) n
あなたは21歳です!
ユーザーが無効な入力を書き込んだ場合:
答え: (y/n) w
理解できません!
回答: (y/n) // この行と次の行は印刷されるべきではあり
ません。わかりません!回答: (y/n)
//(現在はユーザー入力を待機しています)
何か案は?
編集
修正しました:(追加で宣言しましたchar buf[50]
)
誰かがscanfの問題を教えてもらえますか?
c - fflush(FILE *stream) が機能しない?
が指すファイルで、文字の後ろu
をに置き換えようとしました。 b
*ft
このコードは正常に実行されますが、ファイルを開くと編集されていないように見えます。
上記のコードは で正常に動作しfseeks(ft,0,SEEK_CUR)
ます。
で動作しない理由fflush(ft)
。
c - プログラムは、fflush(stdin) を使用しても、scanf() の後に gets() を実行しません。
scanf() を使用した後にプログラムが gets() を実行しない理由を探すのに多くの時間を費やした後、scanf() の後に fflush(stdin) を使用して gets() を有効にして文字列を取得する解決策を見つけました。
問題は、fflush(stdin) が期待どおりに動作しないことです。プログラムは gets() をスキップし続け、コンソールに読み取り対象のフレーズを書き込むことができません。
私のコードは次のものです:
c - 矢印キーとfflush(stdin)の出力について
私たちが知っているように、それarrow keys
は2つの出力を生成します224 and (72 or 80 or 75 or 77)
。
コード 1:-
上記の場合、 I を入力するarrow key
と224
が格納されch
、対応する出力が に格納されch1
ます。
コード 2:-
コード2でも同じことが起こります。対応する出力を にフラッシュしない
理由を知りたいです。fflush(stdin)
224