問題タブ [strtol]
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 からの引数入力を使用したキャストの問題
ユーザーがコマンドラインに 2 つの引数を入力する必要がある C プログラムを作成しようとしています。まず、読み取る値のテキスト ファイルの名前を指定する必要があります。次に、0 または 1 の値を指定する必要があります。この値は、ブール値 (0=false、1=true) として使用される整数として保存されます。
エラーが発生します:
2 つの質問があります。ファイル名の読み方は正しいですか? 第二に、キャスティングの問題をどのように解決しますか?
c - c で strtol() を使用しようとしていますが、最初の引数に対してのみ機能します
4 つのコマンドライン引数を 4 つの int に入れようとしています。最初の引数では機能しますが、残りの引数では 0 を返します。何が間違っているのかわかりません。
たとえば、プログラムを として実行すると./a.out -5 5 3 9
、解析された値は-5 0 0 0
.
c - C、配列に分割された数値を int に入れる方法
、、などがあるchar array[10]
としましょう。[0] = '1'
[1] = '2'
[2] = '3'
(int) 123
Cを使用して、これらのインデックスから作成するにはどうすればよいですか?
SRAM が 2kb 未満に制限されている arduino ボードにこれを実装したいと考えています。そのため、機知と効率が重要です。
Sourav Ghosh のおかげで、カスタム関数でこれを解決しました。
c - それからintとヒストグラムを返すための文字列、strtolまたはatoiのC 2D配列
これは、文字列内のいくつかの数値が何回あるかを表示するための関数ですが、2D 配列は私にとっては機能しFift Evenue 45/01
ませhist_arr
ん。
c - C の strtod() が間違った値を返す
私は現在、私の大学での実験室演習用の銀行端末プログラムに取り組んでいます。
私の足を踏み外したのは、転送される金額のユーザー入力を受け取り、それがすべての要件に適合するかどうかを確認し、適合する場合はプログラムに提供された値を返す関数です。
私たちの家庭教師は、入力を保護するあらゆる手段に腹を立てているため、あらゆる種類の不一致についてエラーを呼び出す必要があります。価値が高すぎる?エラー。負またはゼロの値? エラー。0.01 よりも正確な数値は? エラー。入力に数字以外のドット以外の文字が含まれていますか? エラー。
そのため、私の機能は間違いなく過度に複雑ですが、それでも問題ありません。私を壁に押し上げるのは、atof()
とstrtod()
関数の両方が何らかの形で間違った方法で数値を読み取るという事実です。
ここで使用されている関数に関する限りcheck()
、文字列に有効な文字 (数字とドット) のみが含まれているかどうかを確認し、press_enter()
Enter キーを押してメイン メニューに移動するのを待機し、accept()
y/n/e のみを読み取り、true
yに戻り、 false
nに戻り、終了します。 eのメニューへ。
制御変数の長い部分は、数値が 0.01 よりも正確でないかどうかを確認するための私の解決策です。悲しいことに、それは動作しませんstrtod()
。
私の問題は、それstrtod()
が実際には機能しないことです!アンダーフローやオーバーフローにはほど遠い、本当に平凡な数値であっても、返される値は入力と一致しません。いくつかの例:
それが私のせいである可能性は低いですが、このコードを数時間使用した後でも、まだ機能する解決策を思い付くことができませんでした。
の読みを修正する方法はありますstrtod()
か? そうでない場合、チェックする必要があるすべてをチェックできるように、その入力を取得する別の方法はありますか?
編集:注意してください!
私の家庭教師は一緒に仕事をするのが最も簡単な人ではないことをまだ述べていない場合は、今そうします.
彼は、アカウントに保存されている残高を保持するために、DOUBLE 形式を使用することを強制します。私の同僚の 1 人が、2 整数ドル - セント構造を使用したことでプログラムが拒否されたので、私はそれを知っています。
ここで助けていただければ幸いです。どうにかしてその問題を解決できますか? 私はお金を保管するためにダブルタイプを使わなければなりません。また、入力に文字が含まれていないかどうかを確認する必要があります(scanf()
オンに設定する%Lf
と、数字以外のすべてが末尾から削除されます)、入力が 0.01 よりも正確でないかどうかを確認する必要があります。入力。助言がありますか?
c - 文字列を分割し、個々の部分を 16 進数に変換します
"03FE"
16 進数値を保持するような文字列があります。この文字列を 2 つの部分に分割し、それぞれの部分を同等の 16 進数に変換する必要があります。
つまり、0x03
ある変数と0xFE
別の変数が必要です。
たとえば、文字列を分割する必要がなければ、次のようにします。
文字列を分割する必要がある場合、どうすればよいですか?
c - sscanf() hex int を int と unsigned char の配列に変換
UINT8
MAC アドレスの文字列表現をとして定義された の配列に変換していますunsigned char
。通常の 32 ビット s の配列を読み取ると、s のsscanf()
配列と実際の値を読み取るときにすべて 0 を読み取るのはなぜでしょうか。int の間違った末尾の 8 ビットを切り落としているようです。UINT8
int
更新: %hhx
C99以降で動作しますが、古いコードベースを持っているため、最終的には次のようになりましたstrtoul()
: