0 / 0 / 0
Регистрация: 26.03.2015
Сообщений: 8
1

Long int и int : не понимаю!

29.10.2015, 11:47. Показов 1052. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот простой код на С++. Который находит количество цифр в числе . Я создаю переменную типа long int number1; . После запуска программы для проверки вывожу b , чтобы проверить чему оно равно , но ответ всегда 8! Какое бы число я не ввел! Но если поменять тип на int number 1; - Все работает! Почему long int number 1 , так влияет на переменную int b = 0; ? А если поменять на int number 1 , нет? Кто знает отпишитесь! Заранее Спасибо!



C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <conio.h>
void main()
{
long int number1;
int b=0;
 
 printf ( "Enter number \n" );
 scanf ( "%d" , &number1 );
while ( number1 != 0 )
  {
   number1 = number1 / 10;
   b++;
  }
 
printf ( "%d\n" , b );
 
getch();
}
Результат :

Enter number

43
8
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.10.2015, 11:47
Ответы с готовыми решениями:

Какая из этих функций int Q(int w) int W(int y,int u,int i) сработает быстрее?
Если есть 2 функции(простые или перегруженные) к примеру Q(int w) int W(int y,int u,int i)или int...

Требуется написать функцию long long pow(long long a, unsigned int p), которая возводит число a в степень p
Требуется написать функцию long long pow(long long a, unsigned int p), которая возводит число a в...

Не понимаю ошибку invalid conversion from 'int' to 'int*
Код программы следующий #include &lt;iostream&gt; #include &lt;cstdlib&gt; using namespace std; int...

Не работает перегрузка индексного оператора [], вместо [int][int] почему то нужно ставить [0][int][int]
#include&lt;iostream&gt; #include&lt;string&gt; #include&lt;vector&gt; #include&lt;algorithm&gt; #include&lt;ctime&gt;...

7
управление сложностью
1687 / 1300 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
29.10.2015, 12:51 2
Потому что у вас b меняется до тех пор, пока number1 не равно нулю
0
0 / 0 / 0
Регистрация: 26.03.2015
Сообщений: 8
29.10.2015, 16:03  [ТС] 3
В этом и есть смысл! Меняться до тех пор пока не будет равно 0!Вопрос в другом(Еще раз прочтите). Запустите код на си :


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <conio.h>
void main()
{
long int number1;                                        ////////////////////////////////////Поменяйте на int number1; 
int b=0;                                                     \\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\  И увидите разницу!!!
 
 printf ( "Enter number \n" );
 scanf ( "%d" , &number1 );
while ( number1 != 0 )
  {
   number1 = number1 / 10;
   b++;
  }
 
printf ( "%d\n" , b );
 
 
getch();
 
 
}
0
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
30.10.2015, 11:13 4
Цитата Сообщение от Dec Посмотреть сообщение
Поменяйте на int number1 и узрите разницу
Смените компилятор.
0
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
30.10.2015, 11:16 5
Long int и int : не понимаю!
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
30.10.2015, 11:27 6
Лучший ответ Сообщение было отмечено SatanaXIII как решение

Решение

SatanaXIII, целевая архитектура 32 бита?
Думаю проблема воспроизводится только на 64 битах.

Добавлено через 6 минут
Проблема в том, что с старших байтах мусор, получается 8 разрядное число. Вот так
C++
1
scanf ( "%ld" , &number1 );
нужно
1
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
30.10.2015, 11:32 7
Цитата Сообщение от Kastaneda Посмотреть сообщение
целевая архитектура 32 бита?
Ага.
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
30.10.2015, 11:38 8
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Ага.
Вероятно sizeof(int) == sizeof(long int), поэтому проблема не воспроизводится.
0
30.10.2015, 11:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.10.2015, 11:38
Помогаю со студенческими работами здесь

Error LNK2019: unresolved external symbol "public: __thiscall Vector<int>::Vector<int>(int,int,int)" (?0?$Vec
Вот есть заголовочный файл // Заголовочный файл Vector.h #ifndef VECTOR_H #define VECTOR_H ...

[C++ Error] Unit2.cpp(22): E2034 Cannot convert 'int (*)(int,int *)' to 'int'
Всем привет! Пожалуйста , помогите , почему выдает ошибку Unit2.cpp(22): E2034 Cannot convert 'int...

Использование long вместо long int. Возможны ли подводные камни?
Добрый день. Моя цель - писать кроссплатформенный C++ код, поэтому хочу отказаться от типа int...

Вызвано исключение при инициализации массива long long int
long long int c = {}; Если убрать один long, программа запускается и работает нормально. Почему?


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru