問題タブ [scanf]

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

c - Scanfは、Cでループしている間、1つおきにスキップします

簡単なテキストベースの絞首刑執行人ゲームを開発しようとしています。メインのゲームループは、各文字の推測を入力するプロンプトで始まり、文字が単語に含まれているかどうかを確認し、単語に含まれているかどうかを確認します。そうではありません。ただし、ゲームを実行すると、プロンプトが毎回2回表示され、プログラムはユーザーの入力を待機しません。また、ライフ(正しい入力の場合は1ライフ、正しくない場合は2ライフ)が失われるため、取り込んだものは前の入力と同じではありません。これが私のゲームループです。少し簡略化しています。

問題は、スキャンされていないのに何かが取り込まれたと思っていることだと思いますが、その理由はわかりません。誰かが何か考えを持っていますか?Mac OSX10.5でgcc4.0.1を使用しています。

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

c - C プログラミング言語で入力が double であることを確認する方法

他のものではなく、ダブルを持っていることを確認するにはどうすればよいですか?

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

c - Cのファイルからスペースを含む文字列を取得する

ファイルから情報を取得し、そのデータを配列に格納するという課題が与えられました。ファイル内のデータは次のようにソートされます

最初の 20 文字は都市の名前で、その後に緯度と経度が続きます。緯度と経度は、いくつかの方法で簡単に取得できます

fscanf(infile, "%d(または%c私が得ているものに応じて)", pointer)

動作しますので問題ありません。

私の問題は、都市名の一部にスペースが含まれているため、都市名の文字列を収集する方法がわからないことです。区切り記号の使用について何かを読みましたが、読んだところ、行全体を読み取るために使用されているようです。ファイルから都市名を読み取り、スペースを含む名前全体を文字配列に格納する方法はありますか? ありがとう。

0 投票する
16 に答える
65537 参照

c - このコードで scanf() が無限ループを引き起こしているのはなぜですか?

私は、ループサイクルごとに1つずつ、標準入力から数値を読み取る小さなCプログラムを持っています。ユーザーが何らかの NaN を入力すると、エラーがコンソールに出力され、入力プロンプトが再び返されます。「0」が入力されると、ループが終了し、指定された正/負の値の数がコンソールに出力されます。プログラムは次のとおりです。

私の問題は、非数値(「a」など)を入力すると、「-> Err ...」という無限ループが何度も発生することです。これは scanf() の問題だと思います。この関数をより安全なものに置き換えることができることはわかっていますが、この例は初心者向けで、printf/scanf、if-else、およびループについて知っているだけです。

質問への回答は、Cで他のすべてのループをscanf()スキップし、他whileの質問をざっと読んだことがありますが、この特定の問題に実際に回答するものはありません。

0 投票する
4 に答える
16297 参照

c - scanf("%8s", string) オーバーフロー?

通常のコードがオーバーフローする可能性があることはわかっています。

文字列[9];

scanf("%s", 文字列)。

しかし、scanf("%8s", string) をオーバーフローさせることは可能ですか? 8はほんの一例です。

「%8s」が区切りのように機能することは知っていますが、8 文字を超える文字列を入力すると、次の理由でプログラムが終了することにも気付きました。

* スタック破壊が検出されました * : ./a.out が終了しました

======= バックトレース: =========

...

明らかに、GCC によってデフォルトでオンになっているスタック破壊を検出するフラグがあります。これはスタック破壊であるため、オーバーフローして任意のコードを実行する可能性はまだあると思います。

scanf("%s") の呼び出し元を台無しにする通常のオーバーフローとは対照的に、scanf("%8s") がオーバーフローする可能性がある場合は、scanf 関数内でオーバーフローするため、scanf が戻ろうとすると制御が取得されます。

しかし、scanf はモード切り替え (ユーザー モードからカーネル モードへの切り替え) を必要とする syscall であり、内部的には標準入力への読み取りなどを呼び出します。そのため、カーネル モードなどでオーバーフローする可能性があるかどうかはわかりません。

コメント大歓迎です!!

更新 >>

上記の例では、char string[9] が想定されています。次の実際のコードの char string[8]。

問題は、スタック破壊による安全な scanf("%8s") と GCC の中止の間の矛盾するように見える話についてです。

簡略化されたコード:

ノート:

  1. foo は他の誰かによって呼び出されます。
  2. string は実際のコードでは "%8s" で 8 バイトですが、これがスマッシングにつながることはないと思います。
0 投票する
1 に答える
2141 参照

c - scanf()は、前のscanf()から残った入力として'\ n'を取りますか?

次のCコードでは:

2回目の反復入力について、1回目の反復の最後に入力されたものscanfを読み込みますか?'\n'scanf()

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

c - 多次元配列からタイミングを抽出し、C でファイルに書き込む

.srt (字幕) ファイルからタイミングを抽出して、 output.srtという別のファイルに書き込むのに問題があります。次を実行すると、出力ファイルにファンキーなものが書き込まれます。

// ここで、hr=時間、mn=分、sc=秒、ms=ミリ秒

これらの最初の 10 のタイミングを抽出するにはどうすればよいですか?

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

c - Is there a more efficient way of reading a formatted file in C than I have done?

I need to read in a formatted file that looks something like this.

Code: HARK

Name: Oscar

MRTE: Train

etc

At the moment my code looks like this.

#xA;

This way works for me but I don't think writing three fscanf()'s for each line in the text file is the best way to do it, especially as I will be doing it in a loop later.

I tried doing it like this:

#xA;

However this gave me weird symbols when I tried printing the output.

0 投票する
4 に答える
139987 参照

c++ - フォーマットされたIO関数(* printf / * scanf)の変換指定子%iと%dの違いは何ですか

とでフォーマット指定子として使用される場合の%dとの違いは何ですか?%iprintfscanf

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

c - 文字列の読み取りに関する fscanf の問題

.txt ファイルを読み込んでいます。fscanf を使用して、フォーマットされたデータを取得しています。私が問題を抱えている行はこれです:

これは、名前に空白が含まれるまでは問題ありません。たとえば、St Ives という名前を使用します。

ただし、最初の名前 (空白なし) を読み取ろうとすると、機能せず、他の fscanf が台無しになります。

しかし、私は使用している別のファイル内で [^\n] を使用しています。何が起こっているのかわからない。

上記の fscanf の代わりに fgets を使用すると、変数に "\n" が入ります。

編集//

わかりましたので、私が使用する場合:

これにより、空白のない文字列を読み取ることができます。しかし、空白を含む「名前」を取得すると機能しません。