Member NFOC Ответов: 2

Я не могу понять, какая проблема у меня возникает в этом простом коде с типами данных?


Я думаю, что это связано с битовой шириной long в конкретной машине.

int a;
	long b;
	char c;
	float d;
	double e;
	
	std::cin >> a >> b >> c >> d >> e;
	std::cout << a << std::endl;
	std::cout << b << std::endl;
	std::cout << c << std::endl;
	std::cout << d << std::endl;
	std::cout << e << std::endl;


Что я уже пробовал:

Он не работает на этих входах.
211916801 97592151379235457 p 19856.992 -5279235.721231465


в качестве вывода я получаю следующее:
211916801
2147483647
╠
-1.07374e+08
-9.25596e+61

2 Ответов

Рейтинг:
1

jsc42

Я не программист на C++, но ... ..
2147483647-это 2^31 - 1, что говорит о том, что длина составляет 4 байта. Если вы гуглите (например) cpp long bit width вы найдете

c++ faq - каков должен быть размер int, long type в стандарте C++? - переполнение стека[^]

которую я дам тебе прочитать самому - она дает все необходимые подсказки.


0x01AA

+5

Рейтинг:
0

CPallini

Цитата:
97592151379235457

слишком большой для 32-битной машины.
Это ничего не стоит, Син дает какой-то намек на это, попробуйте:
#include <iostream>
using namespace std;

int main()
{

  int a;
  long b;
  char c;
  float d;
  double e;

  cout << "size_of long = " << sizeof(long) << endl;

  cin >> a;
  cout << boolalpha;
  cout << cin.good() << endl;

  cin >> b;
  cout << cin.good() << endl;

  cin >> c;
  cout << cin.good() << endl;

  cin >> d;
  cout << cin.good() << endl;

  cin >> e;
  cout << cin.good() << endl;

  cout << a << endl;
  cout << b << endl;
  cout << c << endl;
  cout << d << endl;
  cout << e << endl;
}


0x01AA

+5

CPallini

Спасибо.