이것은 내 프로그램의 코드 조각입니다. int8_t
데이터 형식을 사용하고 있으며 입/출력에 문제가 있습니다. 프로그램에서 int8_t
을 사용하면 g++
컴파일러에 -std=c++11
플래그를 설정해야합니다. 그랬지만 런타임 오류가 있습니다. 여기 내 코드는 다음과 같습니다C++ 11 int8_t 버그 입력/출력
#include <iostream>
#include <cstdint>
using std::cout;
using std::cin;
using std::endl;
int main() {
int8_t number;
cout << "Enter a number [1-100]: ";
cin >> number;
cout << "You entered: " << number << endl;
cout << number << "/10 = " << (number/10) << endl;
return 0;
}
은 프로그램의 출력입니다 :
$
$ ./a.out
Enter a number [1-100]: 95
You entered: 9
9/10 = 5
쉘 프롬프트입니다. 어쨌든 입력 스트림에서 첫 번째 숫자 만 읽는 것 같습니다. 그렇더라도 정수 구분 9/10
은 5
이 아니라 0
을 반환해야합니다. 이 프로그램은 95/10
을 수행하고 9
의 결과를 반환합니다. 이론적으로이 프로그램은 작동해야하지만 분열 연산자조차도 버그가 있습니다. int8_t
대신 int
을 사용하면 프로그램이 의도 한대로 작동합니다. 이 경우 누군가가 int
데이터 유형을 사용하고 처리하겠다고 말한 것 같습니다. 그러나 우리는 소프트웨어 엔지니어입니다! int8_t
데이터 형식에 본질적으로 결함이 있는지 알고 싶습니다. 왜 적절한 사용자 입력을 받아 들일 수 없으며 또한 나눗셈 연산자를 어기 는가? 사용 가치가있는 프로그래밍 언어는 이러한 불완전 성이 없어야합니다. 그리고 저는 C++이 충분히 대중적이어서 결국 어떤 사람은 int8_t
이 어떤 의미에서 결함이 있다는 것을 깨달았습니다. 그것은 내가 복잡한 것을 알 필요가있는 것이다.