получать разные выходные данные от разных компиляторов - PullRequest
0 голосов
/ 22 апреля 2020

Вопрос заключался в следующем: определите функцию getint (), которая будет получать строку чисел c с клавиатуры, преобразовывать ее в целое число и возвращать целое число в вызывающую функцию.

Мой код :

#include<stdio.h>
#include<math.h>
#include<string.h>

int getint();

int main()
{
    int a;
    a = getint();
    printf("you entered %d",a);
    return 0;
}

int getint()
{
    char str[10];

    printf("Enter number: ");
    gets(str);


    int d=0,len = strlen(str),r = len-1;

    for(int i=0;str[i] != '\0';i++,r--)
        d += (str[i]-48)*pow(10,r);

    return d;
}

пока я запускаю эту программу из возвышенного текста или блока кода, вывод получился неправильным

вывод (из возвышенных и кодовых блоков):

Enter number: 123
you entered 122

Но когда я использовал onlinegdb.com/online_c_compiler, вывод был правильным

Так как же может отличаться вывод от компилятора к компилятору для одной и той же программы

1 Ответ

1 голос
/ 22 апреля 2020

Функция pow работает с числами с плавающей запятой. Таким образом, результат может не совпадать с ожидаемым числовым результатом. Например, pow(10,2) может вывести число, немного большее или чуть меньшее 100. Если результат чуть ниже 100, дробная часть усекается, и у вас остается 99.

Вместо использования pow для целочисленной степени просто умножьте текущее значение d на 10, прежде чем добавлять значение для следующего di git.

d = 10 * d + (str[i]-'0')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...