問題タブ [fgetc]

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.

0 投票する
2 に答える
5370 参照

c - STDIN を使用して fgetc() バッファーで EOF を見つけることができません

EDIT
問題の解決策は、Ctrl-D が実際に行っていたことを理解することでした。
新しい空の行では、単一の Ctrl-D が EOF を通知します。
ただし、行にすでに文字がある場合、最初の Ctrl-D によって、行の内容が画面にエコーされます (ただし、 には書き込まれませんSTDOUT)。文字がすでにバッファにある場合は、2 回目の Ctrl-D を signalEOFに発行して、バッファを に書き込む必要がありますSTDOUT
これは、出力をファイルにリダイレクトすることで実証できます。
編集

から入力を読み取るために fgetc() を使用していますstdin。EOF を受け取るまでループします。ループでは、Ctrl-D が押される前に入力された文字に基づいて文字列を作成します。しかし、ch = fgetc() が読み取るバッファには EOF が含まれていないため、ループを終了する方法がわかりません。(EOF は、最初の値を返すために fgetc() のみをトリガーします。)

ungetc() は EOF をバッファにプッシュすることを許可しません。他の文字をプッシュすると、実際のデータと混同する危険性があります。私は多くの回答を読みましたが、それらはこの問題に対処していないか、実装しようとしているユースケースには当てはまりません。

stdin バッファーでカウント、ピークなどを実行できるようにしたいと考えています。

fgetc() から到着 ( edit )するたびに各文字を処理しているため、行全体 (または一度に X 文字) を読みたくありません。

このジレンマを克服する方法について何か提案はありますか? (NCurses を使用しない場合)

私はUbuntuを使用しています。EOF = Ctrl-D ここに私が取り組んでいるいくつかのコードがあります:

これは機能し、ジョナサンの単純な例と同じですが、私が望むものではありません:

ただし、これはスタックしていますが、やりたいことを実行しようとしています ( edit ) が、もう一度 Ctrl-D が必要です:

質問されたその他のコード:

以下のこのバージョンは、入力文字を 1 文字ずつ処理し、 と同じように機能しcatます。しかし、実装する必要がある追加の変換を適用する前に、最初に各文字を行に処理することにしました。これによりステートマシンの設計が簡素化されましたが、(NCurses を使用せずに) ラインを構築しようとするのは適切なオプションではなかったかもしれません。:(

0 投票する
1 に答える
185 参照

c++ - C ++はfgetsで別の行を読み取ります

nintendo ds 用に C++ でコーディングしており、テキスト ファイルにアクセスするには「FILE」タイプを使用する必要があります。そのため、fgets を使用してテキスト ファイルの内容を表示していますが、ドキュメントを見て、最初の行以外の内容を表示する方法がわかりません。

そのようなことを行う別のコマンドはありますか、または fgets に別の行を読み取らせる方法はありますか?

0 投票する
2 に答える
421 参照

c - fgetc() を使用してファイルから読み取るときの奇妙な終了値

fgetc()数字のみで構成されるファイルから char を読み取るために使用しています。次に、文字を int に変換して出力します。それはいいです。しかし、すべての数字を出力した後、最後に-38-49値を取得します。私はそれをグーグルで検索しましたが、そこには何もありませんでした。入力ファイルには次のものがあります:0105243100000002200000010001318123 出力パフは次のようになります:0105243100000002200000010001318123-38-49 私のコード:

0 投票する
1 に答える
28 参照

linux - ファイルまたは stdin からテキスト行を安全かつ簡単に読み取るにはどうすればよいですか?

fgets には改行が含まれる場合があり、fscanf は本質的に安全ではないため、ファイルからテキストを 1 行ずつ読み取る簡単な代替手段が必要です。このページはそのような機能を見つけるのに適した場所ですか?

0 投票する
0 に答える
120 参照

c - 興味深いセグメンテーション違反

エラーなしでうまく動作するプログラムを書きました。テキスト ファイルを読み取り、内容を配列に書き込みます (行ごとに、この行の文字列を 1 つずつ区切ります)。次に、2 番目のテキスト ファイルを追加し、再度コンテンツを読み取ろうとしましたが、プログラムをデバッグするときにのみ報告されるクレイジーなセグメンテーション エラーが発生しました。

これは、エラーの原因となるプログラムの一部です。

まず、バッファを割り当てようとするとセグメンテーション違反が発生しchar *buffervr = (char *)malloc(size);ます。配列を割り当てる前にこれを行うと、float taz[5000], tel[5000], ttime[5000], tvr[5000][nbins], tdbz[5000][nbins];機能しますか?!

c = fgetc(vrFile);2つ目は、ファイルを開くことはできますが、ファイルを読み取る ことができないことです。ここで、別のセグメンテーション違反が発生しますか?!

誰かが私にそれが間違っていたことを教えてもらえますか?

ありがとうございました!

編集:実際のコード:

注: time、lat、lon、az、el、および vr はポインターです。

編集:私はこの方法で問題を解決しました:

vrFile = fopen("file.txt","r");