[解決済み】C言語で浮動小数点例外(コアダンプ)発生
2022-01-28 04:01:37
質問
Cプログラムを書いて、fedora 32でコンパイルしているとき、いつも次のようなメッセージが表示されます。
Floating point exception (core dumped)
ターミナルからユーザーの入力をスキャンしようとすると、何が間違っていたのかわかりません。
私は、いくつかの
printf
の関数を間に挟んで、どこで止まるかを知ることができました。
scanf ("%i", &number);
関数は、入力を読み込まず、正しく保存しません。
これはコードの一部です。
#include <stdio.h>
int main (void)
{
int number, constant, remain, remain1, mod, count, test;
number = 0;
mod = 1;
count = 0;
printf ("Enter a number to write: \n");
scanf ("%i", &number);
printf ("-1");
constant = number;
test = number;
printf ("0");
if (number < 0)
{
number = number * -1;
printf ("-");
}
printf ("1");
while (test != 0)
{
test /= 10;
count++;
printf ("%i", count);
}
printf ("2");
for (int i = 1; i < count; i++)
{
mod = mod * 10;
}
printf ("3");
while (number != 0)
{
remain = number % mod;
remain1 = constant - remain * mod;
switch (remain)
{
case 0:
printf ("Zero");
break;
case 1:
printf ("One");
break;
case 2:
printf ("Two");
break;
case 3:
printf ("Three");
break;
case 4:
printf ("Four");
break;
case 5:
printf ("Five");
break;
case 6:
printf ("Six");
break;
case 7:
printf ("Seven");
break;
case 8:
printf ("Eight");
break;
case 9:
printf ("Nine");
break;
}
remain = remain1;
mod /= 10;
}
printf ("\n");
return 0;
}
解決方法は?
EDITは、私が最初に推測したように、それはゼロによる除算です。
if(!mod ) // add this if
{printf("Division by zero");exit(0);} //
remain = number % mod;
の結果を必ず確認してください。
scanf
. ここには浮動小数点演算はありませんが、おそらく表示されていないコードのどこかにゼロによる除算があるのでしょう。
#include <stdio.h>
int main (void)
{
int number, constant, remain, remain1, mod, count, test;
number = 0;
mod = 1;
count = 0;
printf ("Enter a number to write: \n");
if(scanf ("%i", &number) != 1)
{
printf("scanf error\n");
}
else
{
printf ("-1");
constant = number;
test = number;
printf ("0");
if (number < 0)
{
number = number * -1;
printf ("-");
}
printf ("1");
while (test != 0)
{
test /= 10;
count++;
printf ("%i", count);
}
printf ("2");
for (int i = 1; i < count; i++)
{
mod = mod * 10;
}
}
}
この機能をシンプルにしたのがこちらです。
char *digits[] = {"Zero","One","Two","Three","Four","Five","Six","Seven","Eight","Nine"};
void printWord(int x)
{
int work = x;
long val = 1;
while(work)
{
val *= 10;
work /= 10;
}
val /= 10;
if(x < 0) printf("Minus");
if(!x) val = 10;
do
{
printf("%s", digits[abs(x / val)]);
x %= val;
val /= 10;
}while(x);
}
int main (void)
{
printWord(0);
return 0;
}
関連
-
[解決済み】stdinとSTDIN_FILENOの違いは何ですか?
-
[解決済み】ポインタと整数の比較で警告が出る
-
[解決済み】警告。この関数ではXが初期化されていない状態で使用される可能性があります。
-
[解決済み】 「配列のイニシャライザーはイニシャライザーリストまたは文字列リテラルでなければなりません」と表示されるのですが?
-
[解決済み】宣言指定子で2つ以上のデータ型がある場合のエラー【非公開
-
[解決済み】execvp: バッドアドレスエラー
-
[解決済み] 除算を強制的に浮動小数点にするにはどうしたらいいですか?除算は0に切り捨てられ続けますか?
-
[解決済み] JavaScriptで浮動小数点数の精度を扱うには?
-
[解決済み】浮動小数点値の比較はどのくらい危険か?
-
[解決済み】Coreはダンプされたが、coreファイルがカレントディレクトリにない?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】stdinとSTDIN_FILENOの違いは何ですか?
-
[解決済み】エラー:cの入力の最後に期待される宣言またはステートメント
-
[解決済み】ポインタへの代入時に互換性のないポインタ型からの初期化警告が発生した
-
[解決済み】 strcpyとstrdupの比較
-
[解決済み】警告:組み込み関数'printf'の非互換な暗黙の宣言(デフォルトで有効]
-
[解決済み】スタックスマッシュを検出しました
-
[解決済み】0LLや0x0ULの意味は何ですか?
-
[解決済み】未定義参照 makefile が間違っているのかも?
-
[解決済み】makefile:4。*** missing separator. 停止する
-
[解決済み】Errno: 11, Resource Temporarily Unavailable(リソースが一時的に利用できない