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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
#1

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

20.02.2014, 17:07. Просмотров 394. Ответов 13
Метки нет (Все метки)

Вот программа, которая переводит введенные цифры в целое число, почему на виндовсе результат на несколько единиц меньше от правильного? На линуксе все работает как нужно.
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);
}
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2014, 17:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос На Windows результат на несколько единиц меньше от правильного; на Linux все работает как нужно (C++):

Как для правильного треугольника и правильного четырёхугольника вычислить его стороны - QBasic
Составить блок-схему и программу вычисления сторон правильного треугольника (a3=R sqr(3)) и правильного четырёхугольника (a4=R sqr(2)),...

Получить все n-элементные последовательности из нулей и единиц содержащие ровно m единиц (m<=n) - C++
Получить все n-элементные последовательности из нулей и единиц содержащие ровно m единиц (m&lt;=n) Помогите, пожалуйста

Как для правильного треугольника и правильного четырёхугольника вычислить его стороны - QBasic
Составить блок-схему и программу вычисления сторон правильного треугольника (a3=R sqr(3)) и правильного четырёхугольника (a4=R sqr(2)),...

Получить все n-элементные последовательности из нулей и единиц содержащие ровно m единиц (m<=n) - C++
Получить все n-элементные последовательности из нулей и единиц содержащие ровно m единиц (m&lt;=n) Помогите, пожалуйста


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

Или воспользуйтесь поиском по форуму:
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ilot
Модератор
Эксперт С++
1811 / 1168 / 229
Регистрация: 16.05.2013
Сообщений: 3,082
Записей в блоге: 5
Завершенные тесты: 1
20.02.2014, 17:12 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ошибка округления pow.
Нет ф-и pow(int, int). Есть
C++
1
_CRTIMP double  __cdecl pow(double, double);
1
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
20.02.2014, 17:24 #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;
}
1
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
20.02.2014, 17:30  [ТС] #4
Цитата Сообщение от Ilot Посмотреть сообщение
Ошибка округления pow
верно.
0
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
20.02.2014, 17:33 #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];
      }
1
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
20.02.2014, 17:37  [ТС] #6
Цитата Сообщение от ValeryS Посмотреть сообщение
C++
n=0; 
 
for(int i = k-1; i <=0; i++) 
{ 
    n*=10; n += a[k]; 
}
точно. вылетело из головы, что можно просто сдвигать разряд.
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
20.02.2014, 17:42 #7
А что, на Линухе работает правильно? Ой, плохой Виндоус!
2
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
20.02.2014, 17:42 #8
programina,
пардон косяк, даже стыдно
не
Цитата Сообщение от ValeryS Посмотреть сообщение
for(int i = k-1; i <=0; i++)
а, конечно же
C++
1
for(int i = k-1; i <=0; i--)
1
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
20.02.2014, 17:44  [ТС] #9
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
А что, на Линухе работает правильно? Ой, плохой Виндоус
Иммменнно!

Добавлено через 1 минуту
Цитата Сообщение от ValeryS Посмотреть сообщение
for(int i = k-1; i <=0; i--)
галочка не в ту сторону смотрит
0
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
20.02.2014, 17:48 #10
Цитата Сообщение от programina Посмотреть сообщение
галочка не в ту сторону смотрит
точно
скопировал твой цикл и поправил, но не все
вот наглядный пример ущербности пути "Copy / Paste"
1
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
21.02.2014, 17:39 #11
ValeryS
n=0;
не нулю, а единице.
1
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
21.02.2014, 17:41 #12
Цитата Сообщение от zss Посмотреть сообщение
не нулю, а единице.
это ты про какой листинг?
0
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
21.02.2014, 17:43 #13
Цитата Сообщение от ValeryS Посмотреть сообщение
это ты про какой листинг?
Пост №5
0
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
21.02.2014, 17:52 #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
1
Yandex
Объявления
21.02.2014, 17:52
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru