Форум программистов, компьютерный форум CyberForum.ru

На Windows результат на несколько единиц меньше от правильного; на Linux все работает как нужно - C++

Восстановить пароль Регистрация
 
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
20.02.2014, 17:07     На Windows результат на несколько единиц меньше от правильного; на Linux все работает как нужно #1
Вот программа, которая переводит введенные цифры в целое число, почему на виндовсе результат на несколько единиц меньше от правильного? На линуксе все работает как нужно.
C++
#include <stdio.h>
#include <locale.h>
#include <math.h>
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    char s[256];
    int a[7];
    int k = 0;
    int n = 0;
    printf("Введите число n: ");
    scanf("%s", s);
 
    for(int i = 0; i < 7; i++)
        if(s[i] >= '0' && s[i] <= '9'){
            a[k] = s[i]-'0';
            k++;
        }
 
    for(int i = 0; i < k; i++)
        n += a[k-i-1] * pow(10,i);
 
    printf("Вы ввели число %d\n", n);
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2014, 17:07     На Windows результат на несколько единиц меньше от правильного; на Linux все работает как нужно
Посмотрите здесь:

C++ Вводим сторку и к(любое число). нужно вывести на экран все слова меньше К
C++ setprecision() не работает, или работает не так как нужно
Получить все n-элементные последовательности из нулей и единиц содержащие ровно m единиц (m<=n) C++
C++ Как записать команду в консоль windows несколько раз?
Как скомпилировать код из под Windows на mac и linux? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
20.02.2014, 17:12     На Windows результат на несколько единиц меньше от правильного; на Linux все работает как нужно #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ошибка округления pow.
Нет ф-и pow(int, int). Есть
C++
1
_CRTIMP double  __cdecl pow(double, double);
zss
Модератор
Эксперт С++
 Аватар для zss
5953 / 5558 / 1787
Регистрация: 18.12.2011
Сообщений: 14,207
Завершенные тесты: 1
20.02.2014, 17:24     На Windows результат на несколько единиц меньше от правильного; на Linux все работает как нужно #3
C++
1
2
3
4
5
6
int stepen=1;
for(int i = 0; i < k; i++)
{
       n += a[k-i-1] * stepen;
       stepen*=10;
}
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
20.02.2014, 17:30  [ТС]     На Windows результат на несколько единиц меньше от правильного; на Linux все работает как нужно #4
Цитата Сообщение от Ilot Посмотреть сообщение
Ошибка округления pow
верно.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,060
20.02.2014, 17:33     На Windows результат на несколько единиц меньше от правильного; на Linux все работает как нужно #5
Цитата Сообщение от programina Посмотреть сообщение
for(int i = 0; i < k; i++)
n += a[k-i-1] * pow(10,i);
можно попроще

C++
1
2
3
4
5
6
n=0;
  for(int i = k-1; i <=0; i++)
     {
       n*=10;
       n += a[k];
      }
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
20.02.2014, 17:37  [ТС]     На Windows результат на несколько единиц меньше от правильного; на Linux все работает как нужно #6
Цитата Сообщение от ValeryS Посмотреть сообщение
C++
n=0; 
 
for(int i = k-1; i <=0; i++) 
{ 
    n*=10; n += a[k]; 
}
точно. вылетело из головы, что можно просто сдвигать разряд.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
20.02.2014, 17:42     На Windows результат на несколько единиц меньше от правильного; на Linux все работает как нужно #7
А что, на Линухе работает правильно? Ой, плохой Виндоус!
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,060
20.02.2014, 17:42     На Windows результат на несколько единиц меньше от правильного; на Linux все работает как нужно #8
programina,
пардон косяк, даже стыдно
не
Цитата Сообщение от ValeryS Посмотреть сообщение
for(int i = k-1; i <=0; i++)
а, конечно же
C++
1
for(int i = k-1; i <=0; i--)
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
20.02.2014, 17:44  [ТС]     На Windows результат на несколько единиц меньше от правильного; на Linux все работает как нужно #9
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
А что, на Линухе работает правильно? Ой, плохой Виндоус
Иммменнно!

Добавлено через 1 минуту
Цитата Сообщение от ValeryS Посмотреть сообщение
for(int i = k-1; i <=0; i--)
галочка не в ту сторону смотрит
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,060
20.02.2014, 17:48     На Windows результат на несколько единиц меньше от правильного; на Linux все работает как нужно #10
Цитата Сообщение от programina Посмотреть сообщение
галочка не в ту сторону смотрит
точно
скопировал твой цикл и поправил, но не все
вот наглядный пример ущербности пути "Copy / Paste"
zss
Модератор
Эксперт С++
 Аватар для zss
5953 / 5558 / 1787
Регистрация: 18.12.2011
Сообщений: 14,207
Завершенные тесты: 1
21.02.2014, 17:39     На Windows результат на несколько единиц меньше от правильного; на Linux все работает как нужно #11
ValeryS
n=0;
не нулю, а единице.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,060
21.02.2014, 17:41     На Windows результат на несколько единиц меньше от правильного; на Linux все работает как нужно #12
Цитата Сообщение от zss Посмотреть сообщение
не нулю, а единице.
это ты про какой листинг?
zss
Модератор
Эксперт С++
 Аватар для zss
5953 / 5558 / 1787
Регистрация: 18.12.2011
Сообщений: 14,207
Завершенные тесты: 1
21.02.2014, 17:43     На Windows результат на несколько единиц меньше от правильного; на Linux все работает как нужно #13
Цитата Сообщение от ValeryS Посмотреть сообщение
это ты про какой листинг?
Пост №5
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.02.2014, 17:52     На Windows результат на несколько единиц меньше от правильного; на Linux все работает как нужно
Еще ссылки по теме:

C++ Напечатать все значения n, при которых все числа последовательности будут не меньше а
Double to int, результат на 1 меньше ожидаемого C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,060
21.02.2014, 17:52     На Windows результат на несколько единиц меньше от правильного; на Linux все работает как нужно #14
zss,
а теперь переведи число хотя бы 10 с n=1
C++
1
2
3
4
5
6
n=1;
  for(int i = k-1; i >=0; i--)
   {
     n*=10;
     n += a[k];
    }
итак массив из двух элементов a[1]=1 a[0]=0 k=2
i=1
n*=10;
1*10=10;
n += a[1];
10+1=11

i=0
n*=10;
11*10=110;
n += a[1];
110+0=110

как то не совпадает
теперь тоже самое с 0

C++
1
2
3
4
5
6
n=0;
  for(int i = k-1; i >=0; i--)
   {
     n*=10;
     n += a[k];
    }
i=1
n*=10;
0*10=0;
n += a[1];
0+1=1

i=0
n*=10;
1*10=10;
n += a[1];
10+0=10
Yandex
Объявления
21.02.2014, 17:52     На Windows результат на несколько единиц меньше от правильного; на Linux все работает как нужно
Ответ Создать тему
Опции темы

Текущее время: 20:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru