問題タブ [fgets]

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 投票する
0 に答える
16764 参照

c++ - gets の安全な代替手段

2 つの単語の間の空白を含めて、標準入力から行全体を読みたいです。

gets on gcc を使用すると、次のメッセージが表示されます。

より良い代替手段は何ですか?

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

c - 新しい行が見つからない場合、fgetsはNULLを返しません

よく私はwhileループを使用しています:

while(fgets(pclientRow、1024、f)!= NULL)

他のクラスでは問題なく動作しますが、そのうちの1つでは、ファイルから1行ずつ読み取っているときに、行が終了してもループから抜け出せません。デバッガーでそれを確認しました。

それはなぜです?以前はそのクラスでも機能していましたが、今では、それが壊れるまで空の行を表示し続ける理由がわかりません。

何か案が?

0 投票する
3 に答える
14819 参照

c - fgets()およびstrtok()を使用してコンマ区切り文字でファイルを読み取る

カンマで区切られた3つのフィールドを持つテキストファイルがあります。私のテキストファイルの内容の例:12345、真のプログラミング初心者、BS MEファイルをプログラムにロードするために、私は以下のコードを使用しました....私の問題は、コードが機能する場合と機能しない場合があることです(エラーメッセージが表示され、プログラムはそれ自体を閉じて続行しません)。また、テキストファイルが空白(何も書き込まれていない)であることがわかりました。自動的に閉じられ、続行されません。あなたの助けをいただければ幸いです。ありがとう!

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

c - fgets() の後、改行はバッファに残りますか?

問題を引き起こしているコードのスニペットは次のとおりです。

名前を入力して Enter キーを押すと、getchar() は次の文字を待つ代わりに改行もキャプチャします。名前が入力された後、 getchar() が期待どおりに文字を待機するように、コードを修正するにはどうすればよいですか?

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

c - C: fgetc() の代わりに fread()/fgets() を使用してテキスト ファイル (可変長行を含む) を 1 行ずつ読み取る (ブロック I/O と文字 I/O)

(キャラクターI/ O)の代わりに(ブロックI/O)をgetline使う機能はありますか?freadfgetc

を介してファイルを文字単位で読み取ると、パフォーマンスが低下しますfgetcfreadパフォーマンスを向上させるために、 の内部ループでブロック読み取り経由を使用できると考えていますgetline。ただし、これにより、行末を超えて読み取るという望ましくない影響が生じる可能性があります。少なくとも、これにはgetline、ファイルの「未読」部分を追跡するための の実装が必要です。これには、ANSI C FILE セマンティクスを超えた抽象化が必要です。これは私たちが自分たちで実装したいものではありません!

アプリケーションのプロファイリングを行いましたが、パフォーマンスの低下は、大きなファイルを 1 文字ずつ消費しているという事実に起因していますfgetc。残りのオーバーヘッドは、比較すると実際には取るに足らないコストです。ファイルのすべての行を最初から最後まで常に順番に読み取り、読み取り中はファイル全体をロックできます。これにより、おそらくfreadベースのgetline実装が容易になります。

では、(キャラクターI/ O)の代わりに(ブロックI/O)をgetline使う機能は存在するのでしょうか?そうなっていると確信していますが、そうでない場合、どのように実装すればよいのでしょうか?freadfgetc

更新Paul Hsieh による便利な記事、 Handling User Input in Cを見つけました。これは にfgetc基づくアプローチですが、代替案について興味深い議論があります (最初に がいかに悪いかgets、次に について議論fgetsます)。

一方、C プログラマー (経験者と見なされている人でも) からの一般的な反論は、代わりにfgets()を使用する必要があるというものです。もちろん、それ自体では、fgets()は実際にはユーザー入力自体を処理しません。奇妙な文字列終了条件 (\n または EOF に遭遇したとき、\0 に遭遇したとき) があることに加えて、バッファーが容量に達したときに終了するために選択されたメカニズムは、単純にfgets()操作を突然停止し、\0 で終了することです。したがって、ユーザー入力が事前に割り当てられたバッファーの長さを超える場合、fgets()部分的な結果を返します。この問題に対処するには、プログラマーにはいくつかの選択肢があります。1) 単純に切り捨てられたユーザー入力を処理します (入力を提供している間、入力が切り捨てられたことをユーザーにフィードバックする方法はありません) 2) 拡張可能な文字配列をシミュレートし、fgets()への連続呼び出しで入力します。 . 最初の解決策は、ほとんどの場合、可変長のユーザー入力に対して非常に貧弱な解決策です。これは、多くの通常のケースをキャプチャしようとするため、ほとんどの場合、バッファーが必然的に大きくなりすぎ、異常なケースでは小さすぎるためです。2 番目の解決策は、正しく実装するのが複雑になることを除けば問題ありません。どちらも'\0' に関するfgets の奇妙な動作を扱いません。

読者に残された演習: fgets()への呼び出しによって実際に読み取られたバイト数を決定するために、'\n' をスキャンするのと同じように、'\0' をスキップしてみてください。fgets()に渡されるサイズを超えない。ストリームの最後の行でこれが不十分な理由を説明してください。ftell() のどの弱点が、この問題に完全に対処するのを妨げていますか?

演習は読者にお任せします: fgets( )への呼び出しごとにゼロ以外の値でバッファ全体を上書きすることにより、 fgets()によって消費されるデータの長さを決定する問題を解決してください。

そのため、fgets()では、多くのコードを記述し、C ライブラリの残りの部分と矛盾する行終了条件に対処するか、任意のカットオフを設定するかを選択する必要があります。これで十分でない場合、何が残されるのでしょうか? scanf()は、分離できない方法で解析と読み取りを混合し、fread()は文字列の末尾を超えて読み取ります。要するに、C ライブラリには何も残されていません。fgetc()の上に直接基づいて独自にロールすることを余儀なくされています。それでは、試してみましょう。

それで、にgetline基づくfgets(そして入力を切り捨てない)関数は存在しますか?

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

c - fgets malloc c help

fgetsの変数がある場合

たとえば、fgets(question、200、stdin); 末尾の空白の要素をすべて使用せずに、変数の質問のサイズを決定するにはどうすればよいですか?

0 投票する
5 に答える
4455 参照

c - c改行文字ヘルプを削除します

これがばかげた質問であるならば、申し訳ありませんが、私はかなり新しいです!

私はこれを持っています:

ただし、質問変数の末尾には常に新しい行があります。どうすればこれを削除/防止できますか?

私はこれを試しました:

効果はありませんでした!

0 投票する
3 に答える
1008 参照

c - ファイルの読み取り、データの取得、計算の方法

私は本を​​読んでいますが、これを試してみてください: (英語ではないので翻訳しました)

生徒数 n を要求し、n 人の生徒を動的に選択するプログラムを作成します。名前は 10 文字で、メモは 5 文字です。

上記の選択内容からテキスト ファイル note.txt を作成し、10 文字になるようにハイフンを追加します (名前用)。

次に、ファイルを読み取り、そこから (のみ) 合計を計算します。次に、メモが 10 以下のものの名前とメモを表示します。

createStudent、createFile、readFile の 3 つの関数を実装する必要があります。グローバル変数は使用しないでください。

構文 : 名前は char nom[10+1] として宣言する必要があります (つまり、James。10 文字を取得するために 5 つのハイフンが追加されます) => james----- および注: char[5+1] (つまり15.00 または 07.50)

ヒント : メモをテキスト形式から浮動小数点形式に変換するには、atof 関数を使用できます。

createStudent 関数と createFile 関数を作成しました。それらはうまく機能しますが、最後の部分 (readFile 関数) がわかりません。

私のテキスト ファイルは次のような形式です: Bart------ 04.50 Lisa------ 18.00 Homer----- 03.00

コンパイルはできますが、動作せず、その理由がわかりません :( C 言語は Java や C# に比べて非常に面倒だと感じています。

ライトをください。

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

php - PHP関数「fgets」を正しく使用するには?

私はfgets()間違った使い方をしていると思います。PHPファイルを開いて、そのファイル内の行を作成した変数と一致させようとしています。行が一致する場合は、その行のすぐ下のファイルに PHP コードを書き込み/挿入します。例:

ここで、ファイルの 480 行目から PHP コードを書きたいと思います。どうすればよいでしょうか?

有用な情報は次のとおりです。IIS 6 および PHP 5.2。

0 投票する
7 に答える
9860 参照

c - C での fgets 関数の使用法

私の課題の 1 つは、独自の UNIX シェルを作成することです。ユーザーからの入力を受け取るために、fgets を使用して入力を文字列としてキャプチャしていますが、それがどのように機能するかはよくわかりません。私が実行すると:

私の入力が「終了」だったとしましょう。strlen は、文字列の長さが 4 文字ではなく 5 文字であることを示しています。私はこれをしたい:

しかし、コマンドは私が望む文字列と決して等しくありません。よくわからない未知のキャラクターを持っているようです。最後にヌル文字ですか?if ステートメントを変更して、fgets でキャッチされたユーザー入力が「exit」に等しいことを確認するにはどうすればよいですか? ありがとう!