Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.06.2010, 00:30   #1
Inna_L
Пользователь
 
Регистрация: 22.06.2010
Сообщений: 13
Вопрос Проблема с домашним заданием на С

Добрый вечер, я совсем новичок, задание сделала не пойму в чем ошибка. Пользователь вводит с клавиатуры число - программа должна
показать сколько в данном числе цифр. Число вводится целиком в одну
переменную. Если ввести число, в котором больше 10 цифр пишет = 0..
Код:
 #include <iostream>
using namespace std;
void main()
{
     int a=0,i=0;
     cout<<"Enter a number \n";
     cin>>a;
	 for ( ;a>0;i++)
{
     a/=10;
}
     cout<<"rezyltat: "<<i<<'\n';
}
Inna_L вне форума Ответить с цитированием
Старый 22.06.2010, 02:29   #2
Nitrino
Я ещё только учусь
Форумчанин
 
Регистрация: 06.05.2009
Сообщений: 158
По умолчанию

При деление числа на 10 никак не может получиться отрицательное число или = 0, а в условие цикла стоит делать пока а>0 следовательно происходит зацикливание
Nitrino вне форума Ответить с цитированием
Старый 22.06.2010, 04:10   #3
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Как раз наоборот, не происходит ни одной итерации цикла. Когда вы, Inna_L, вводите столь большое число, происходит так называемое "переполнение". Дело в том, что в 32-х битных ОС int обычно длиной в 4 байта, один бит на знак, таким образом максимальное число, которое можно закодировать оставшимися битами является два с лишним миллиарда(а минимальное минус два с лишним миллиарда). При превышении этого числа происходит переполнение и число становится отрицательным, а в условии цикла условие на "больше нуля". То есть во-первых, не вводите такие длинные числа, а во-вторых, неплохо бы в цикле делать проверку на ноль, а не на больше нуля, это будет работать, так как int - целочисленный тип, дробей в нём не бывает. То есть, например, так:
Код:
#include <iostream>
using namespace std;
void main()
{
     int a=0,i=0;
     cout<<"Enter a number \n";
     cin>>a;
     for ( ;a != 0;i++)
     {
         a/=10;
     }
     cout<<"rezyltat: "<<i<<'\n';
}
netrino вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с заданием аргументов функции по умолчанию LMnet Помощь студентам 4 15.01.2010 17:59
Проблема с заданием условий. Помогите пожалуйста. lubov09 Microsoft Office Excel 7 04.11.2009 13:55
помогите с заданием klepan Общие вопросы C/C++ 2 26.06.2009 12:32