【发布时间】:2020-08-07 10:24:49
【问题描述】:
在编写 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;
}
【问题讨论】:
-
用
char temp[1000]; if (!fgets(temp, sizeof temp, stdin)) exit(EXIT_FAILURE); if (sscanf(temp, "%i", &number) != 1) { fprintf(stderr, "error reading number from %s", temp); exit(EXIT_FAILURE); }替换scanf(...) -
还是一样。
-
所以,
scanf()调用不是问题 -
这听起来是一个学习使用调试器的好机会。
-
你使用 %f 但数字是 int
标签: c linux floating-point scanf fedora