問題タブ [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.
c - C、単一の入力行から複数の数値を読み取る(scanf?)
入力時に2行を期待するアプリをCで作成しました。最初の入力はintの配列の大きさを示し、2番目の入力にはスペースで区切られた値が含まれます。たとえば、次の入力
を含む配列を作成する必要があります{1,2,3,4,99}
そうするための最速の方法は何ですか?私の問題は、文字列全体をループせずに複数の数値を読み取って、それがスペースか数値かを確認することです。
ありがとう。
c - C を使用した科学表記法で "E" の代わりに "D" を使用して ASCII 数値を読み取る
次のような数字のリストがあります:1.234D+1
または1.234D-02
. C を使用してファイルを読みたいと思います。この関数atof
は単に を無視しD
、仮数のみを変換します。
指数に a ではなく aが必要なため、この関数fscanf
はこの形式を受け入れません。'%10.6e'
E
D
Python でこの問題に遭遇したとき、あきらめて、文字列から浮動小数点数に変換する前に単に文字列置換を使用しました。しかし、C では、別の方法があるに違いないと確信しています。
では、科学表記法D
の代わりに数字を使用してファイルを読み取るにはどうすればよいでしょうか。E
文字列自体を読み取る方法ではなく、浮動小数点数に変換する方法を意味していることに注意してください。
ありがとう。
c - 一部のプラットフォームで sscanf + c99 が動作しない?
シンプルな Hello World! をコンパイルすると ローカルの Debian lenny x64 で sscanf 関数を使用するプログラムが動作します。しかし、CentOS x86 を実行しているサーバーに同じプログラムをアップロードすると、機能しません。sscanf を使用しない場合、プログラムは両方のコンピューターで動作します。
gcc -std=c99 -O2 -pipe -m32
sscanf を使用して -std=c99 を指定せずにコンパイルすると、両方のコンピューターで動作します。
gcc -O2 -パイプ -m32
CentOS x86 での sscanf と c99 の問題は何ですか? -m32 フラグを指定してコンパイルすると、すべての Linux で動作すると思いましたか? (CentOS サーバーへのアクセスが制限されているため、エラー メッセージにアクセスできません。)
c - C - fscanf() を取得して、読み取ったものが数字のみで文字がないかどうかを判断する方法
csv があり、各値が整数であると想像してください。したがって、最初の値は INTEGER100
です。
fscanf() にこの行を読み取らせて、それが整数のみであるかどうかを教えてもらいたいです。したがって、それは合格します100
が、 で失敗し100t
ます。私が仕事を得ようとしてきたのは「%d」です。カンマは CSV の区切り文字です。したがって、関数全体は
残念ながら、これは「100t」では失敗し、「100」では機能し、「t」では機能します。したがって、とを区別していないだけです100
(100t
もちろん、これらの数字の後にはすべてコンマが続きます)
c - while ループ内の scanf segfaults およびその他のさまざまな異常
いくつかの異なるエラーが発生していますが、実際には再現できないようです (この時点での segfault を除いて)。このコードは、約 10 分前には問題なく動作していましたが、printf コマンドを無限ループさせ、現在は上記の行でエラーを検出しています。私が変更scanf(">%s",command);
したのは、現在のものだけです。コマンド変数を配列に変更すると機能します。明らかにこれは、ストレージがそのために確保されているためです。
- 私は誰かにポインタをmallocする必要があると言ったことで起訴されました*(しかし、それは通常、配列にするなどの問題を解決するようです)
- 私が入力しているコマンドは "magic" (5 文字) であるため、異常なスタック オーバーフローは発生しません。
- Mac OS X 10.6 で最新バージョンの xCode (非 OS4) と標準の gcc を実行しています。
- これは私がプログラムをコンパイルする方法です:
gcc --std=c99 -W sfs.c
何が起こっているのかを理解しようとしているだけです。これは私が二度と見る必要のない学校のプロジェクトのためのものなので、上司を泣かせる初心者向けの作業をコード化するだけです:)それに対するいくつかの修正、およびそれに対する何らかの修正がある場合、その修正が機能する理由。
c++ - C ++:単純な正規表現で解析するか、sscanfを使用する必要がありますか?
のような文字列を解析する必要がありますfunc1(arg1, arg2); func2(arg3, arg4);
。これはそれほど複雑な構文解析の問題ではないので、flex/bisonまたは同様のユーティリティに頼るのは避けたいと思います。
私の最初のアプローチは、POSIXCregcomp/regexec
またはC++のBoost実装を使用することでしたstd::regex
。次の正規表現を作成しましたが、機能しません(理由については後で説明します)。
1
グループは識別子をキャプチャし、グループ4..n-1
はグループによってキャプチャされる最後の引数を除いて引数をキャプチャすることを目的としていることに注意してくださいn
。
この正規表現をに適用するとfunc(arg1, arg2, arg3)
、得られる結果は配列であると言い{func, arg2, arg3}
ます。入っていないのでこれは間違ってarg1
います!
問題は、標準の正規表現ライブラリでは、サブマーキングは最後の一致のみをキャプチャすることです。つまり、たとえば正規表現を"((a*|b*))*"
適用した場合"babb"
、内部一致の結果は次のようにbb
なり、以前のすべてのキャプチャは忘れられます。
ここで私を悩ませているもう1つの点は、エラーが発生した場合、入力が拒否されたときのパーサーの状態に関する情報がほとんど提供されないため、どの文字が認識されなかったかを知る方法がないことです。
だから私はここで何かが欠けているかどうかわかりません...この場合sscanf
、代わりにまたは同様のものを使用する必要がありますか?
私はC/C ++標準ライブラリを使用することを好むことに注意してください(そしておそらくブースト)。
c - double の sscanf
これは単純な問題ですが、私には見えません:
d
double 値が含まれていないのはなぜ8.649292
ですか?
c - \n区切られたファイルから文字列を読み取る方法
戻り区切りファイルを読み込もうとしています。フレーズだらけ。
各フレーズを文字列に入れようとしています。
問題は、ファイルを次のように読み込もうとすると、
文字列には1つの単語しか含まれていません。スペースにぶつかると、文字列の読み取りを停止します
scanf - 条件が満たされたときに fscanf に行を再読み取りさせるにはどうすればよいですか?
while( fscanf( tracefile, "%s ", opcode ) != EOF ){何とか}
場合によっては、コード内の特定の条件が満たされたときに、fscanf に行を再読み取りさせる必要があります。これは可能ですか?どうすればいいですか?
ありがとう。
c - Cプリプロセッサを使用してscanfの文字列リテラルを構築しますか?
sscanf
C99 でのバッファ オーバーラン防止に役立つ文字列リテラルを作成しようとしています。目標は次のようなものです。
明らかな「手動」ソリューションは次のようなものです。
ただし、バッファー サイズが 16 の場合に "%15X" を自動的に生成する方法をお勧めします。
提案?