Проблема с scanf, C. Исключение с плавающей точкой - PullRequest
1 голос
/ 17 декабря 2010

Я учусь C.

Я использую Ubuntu и имею Code :: Blocks в качестве IDE У меня есть этот код:

#include <stdio.h>

int rev (int num);

int main (){
    int numb = 0;

    printf("%d\n\n", numb);

    printf("Please enter a number. Enter 9999 to stop\n");
    scanf("%d", &numb);
    printf("there?");
    printf("%d\n", numb);

    while (numb != 9999){
        printf("The reversed number is %d\n", rev(numb));
        printf("Please enter a number. Enter 9999 to stop\n");
        scanf("%d", &numb);
    } /* end of while */

}

int rev (int num){
    printf("here?");
    int total = 0;
    long max = 10;
    long max_const = 10;

    printf("here");

    for (max; max < num; max *= 10);

    printf("%ld", max);

    max_const = max;

    for (int i = 0; i <= max_const; i *= 10, max /= 10){
        total += num / max * i;
    } /* end for */

    return total;
}

Я делаю это таким образомпотому что моя книга не ясна ... однако, проблема в том, что она вызывает исключение с плавающей точкой, в scanf ... я набираю нормальные числа ... странно то, что если я наберу все, кроме 9999,сбой программы.если я наберу 9999, он напечатает «там?»(так что scanf, все в порядке) и остановимся позже, очевидно.почему?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 17 декабря 2010

Два существующих (обязательно верните результат в rev и положите \n на концах printfs, чтобы убедиться, что они пройдут через буфер) - это хорошие моменты, но не то, что на самом деле вызываетваше исключение с плавающей точкой.Попробуйте запустить его в отладчике, и вы увидите, что ваш алгоритм плох: в конечном итоге max становится равным нулю, и вы делитесь на него.Я оставлю это как упражнение для читателя;проблема не в том, что касается scanf.

1 голос
/ 17 декабря 2010

Ваша функция rev должна возвращать обратное число.

...