|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
28.09.2012, 20:35 | #1 |
Форумчанин
Регистрация: 25.09.2012
Сообщений: 182
|
Цикл while в C
программа должна считать, сколько цифр в введёном числе, и вроде бы пашет, но если вводиш число в котором больше 10 цифер начинает неправильно считать
Код:
Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать.
Brian W. Kernighan. |
28.09.2012, 20:54 | #2 |
Пользователь
Регистрация: 28.09.2012
Сообщений: 20
|
Тип переменных "int" имеет границы, при выходе за которые случаются ошибки и переполнения. Я не помню точно, но не исключено, что Вы таки за эти границы вышли, введя слишком большое число.
Возможные пути решения, в порядке возрастания сложности: 1) Не использовать очень большие числа. 2) Использовать типы данных, у которых диапазон значений больше. Например, __int64 Пример тут: http://lukianov.ru/content/ispol-zov...nt64-v-cc.html 3) Написать свой тип данных, реализующий неограниченные целые числа. |
28.09.2012, 20:58 | #3 |
Форумчанин
Регистрация: 25.09.2012
Сообщений: 182
|
Я думал насчёт этого, а вот нифига подобного, даже если 11 цифер, уже косяк
Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать.
Brian W. Kernighan. |
28.09.2012, 21:03 | #4 |
Пользователь
Регистрация: 28.09.2012
Сообщений: 20
|
Насчёт чего именно? Того, что int ограничен? Или насчёт использования __int64?
|
28.09.2012, 21:07 | #5 |
Пользователь
Регистрация: 28.09.2012
Сообщений: 20
|
Нужно ещё не забыть правильно указать аргументы у функции scanf, когда будете раотать с __int64. Будет выглядеть так: scanf("%I64d", &N);.
|
28.09.2012, 21:07 | #6 |
Пользователь
Регистрация: 28.09.2012
Сообщений: 20
|
Нужно ещё не забыть правильно указать аргументы у функции scanf, когда будете работать с __int64. Будет выглядеть так: scanf("%I64d", &N);.
|
28.09.2012, 21:07 | #7 |
Форумчанин
Регистрация: 25.09.2012
Сообщений: 182
|
Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать.
Brian W. Kernighan. |
28.09.2012, 21:12 | #8 |
Пользователь
Регистрация: 28.09.2012
Сообщений: 20
|
Ну так пользуйтсь __int64, если так нужны большие числа. Но это тоже ограниченный тип, просто ограничение побольше. С точки зрения алгоритма программа у Вас написана правильно.
|
28.09.2012, 21:13 | #9 |
Форумчанин
Регистрация: 25.09.2012
Сообщений: 182
|
Попробовал с __int64, всё заработало.Спасибо.
Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать.
Brian W. Kernighan. |
28.09.2012, 21:16 | #10 |
Пользователь
Регистрация: 28.09.2012
Сообщений: 20
|
А теперь попробуйте ввести 30-значное число.
Ничего бесконечного не бывает, увы... |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Цикл по времени - Как сделать так чтобы цикл выполнялся к примеру 10 секунд ? | Anarki | Общие вопросы C/C++ | 3 | 13.11.2009 19:23 |
Цикл do while | S@muel | Общие вопросы C/C++ | 1 | 29.03.2009 23:01 |
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) | Mr.User | Помощь студентам | 9 | 23.11.2007 01:34 |