>> 문자를 int 변수로 변환하면 어떻게됩니까? 두 개의 int 값을 추가하기 위해 간단한 코드를 시도했다. 그러나 편지를 쓸 때, 실패하고 화면에 수많은 숫자를 인쇄합니다. 그러나이 오류의 원인은 무엇입니까? 내 말은, 나는 그 편지의 ASCII 코드를 적재하고 사용하기를 기대했다. 명시 적으로 int로 당신의 문자를 캐스팅하면 당신은 당신이 점점 이상한 결과를 얻을 수 있도록C++에서 int로
답변
, 그것은, 다른 사람이 int로 그 자체로 캐스팅하고 아니에요, ASCII 코드를 사용합니다.
int n;
while (someCondition) {
std::cin >> n;
.....
std::cout << someOutput;
}
당신은 정수, 스트림 (표준 : CIN)으로 읽을 수없는 뭔가를 입력 실패한을 입력 :
당신은 int istream::get();
를 사용할 수 있습니다 난 당신과 같은 코드가 있다고 가정 상태 및 다음 모든 입력 시도가 입력 오류를 처리하지 않는 한 실패합니다.
당신은 입력 작업의 성공 테스트 할 수 있습니다
if (!(std::cin >> n)) //failed to read int
을하고 (입력 실패의 원인 입력) 처리되지 않은 문자를 좋은 상태로 스트림을 복원하고 폐기 할 수
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
또 다른 가능성은 문자열 변수에 입력을 받아들이고 (거의 실패하지 않음) 문자열을 int로 변환하려고 시도하는 것입니다.
이 입력에 매우 일반적인 문제이며 여기에 다른 곳에서 그것에 대해 스레드의 톤이 있어야한다.
문제는 정수 변수로 읽을 때, C++ 스트림을 사용하여 입력 방법은 '+'와 같은 번호를 만들 수있는 문자를 기대하고 있다는 것입니다 '-', '0'... '9 '. 이 집합에없는 문자는 입력을 종료하고이 문자로부터 숫자가 만들어집니다.
은 문자의 ASCII 값을 얻으려면, 당신은char
변수로 데이터를 입력해야합니다. 내부적으로 ASCII 값을가집니다 (프로그램이 16 비트 문자 또는 EBCDIC을 읽지 않는 경우). ASCII 값을보고 싶다면
char
변수를 정수로 출력해야합니다 (일반적으로 출력 전에 캐스트가 필요함).
정수를 읽는 것은 실패 할 경우
이 프로그램은 입력이 올바르지 사용자를 통보해야합니다. 프로그램이 입력 데이터를 처리하기 전에 사용자가 번호를 다시 입력해야 할 수도 있습니다. 당신은 같은 일을:
int x;
cin >> x;
당신은 C를 지시됩니다 ++ 키보드에서 int
를 읽을 것으로 예상합니다. 사실 int
이 아닌 것을 입력하면 입력 스트림 (이 경우 표준 입력)은 오류 상태로 인해 사용할 수 없게 렌더링됩니다. 저는 개인적으로 항상 문자열을 읽어 선호하고, 필요한 경우 숫자로 변환 이유
. 이 기능을 지원하는 C++ 표준 라이브러리의 C 부분에는 변환 함수가 있습니다.
double cnvtToNumber(const std::string &num)
{
char * ptr;
double toret = strtod(num.c_str(), &ptr);
if (*ptr != 0) { // If it got to the end of the string, then it is correct.
throw std::runtime_error("input was not a number");
}
return toret;
}
여기서는 숫자를 변환하고 변환이 올바른지 감지합니다.strtod(s)
은 문자열의 끝이나 공백을 찾을 때만 중지됩니다.
std::string &trim(std::string &str)
{
// Remove trailing spaces
unsigned int pos = str.length() -1;
while(str[ pos ] == ' ') {
--pos;
}
if (pos < (str.length() -1)) {
str.erase(pos + 1);
}
// Remove spaces at the beginning
pos = 0;
while(str[ pos ] == ' ') {
++pos;
}
if (pos < 1) {
str.erase(0, pos);
}
return str;
}
이제
안전하게 콘솔 (또는 어떤 다른 입력 스트림)에서 읽을 수 있습니다 : 함수를 속여 후행 공백을 방지하기 위해, 당신은 트림 기능을 필요로 할 수 물론
int main()
{
std::string entry;
try {
std::getline(std::cin, entry);
int age = cnvtToNumber(trim(entry));
std::cout << age << std::endl;
} catch(const std::exception &e) {
std::cerr << e.what() << std::endl;
}
}
당신이 할 수있는 항상 double
을 읽고 변환하면 정밀도가 떨어집니다. 추가 조사가 필요한 경우에 대비하여 정수 (strtol(s)
)에 대한 특정 기능이 있습니다.
- 1. C에서 문자열을 int로 변환하는 방법
- 2. objective-c에서 byte 값을 int로 변환하는 방법
- 3. 객관적인 C에서 문자열을 int로 변환하는 방법
- 4. Objective C에서 float를 int로 변환하려면 어떻게해야합니까?
- 5. C에서 계수를 사용하여 플로트를 Int로 변환 할 수 있습니까?
- 6. C에서 void *를 int로 안전하게 캐스팅하는 방법은 무엇입니까?
- 7. int를 int로 변환 한 후 int로 변환합니다.
- 8. ansi c : argv를 int로 변환
- 9. 부호없는 int로 로그인했습니다.
- 10. C++에서 Int로 변환할까요?
- 11. int로 줄 바꿈
- 12. int를 어떻게 변환합니까? int로
- 13. int32를 int로 변환하십시오.
- 14. 확장 문자를 int로 변환
- 15. char에서 int로 변환 NSString
- 16. Char를 Int로 변환
- 17. Haskell에서 Float을 Int로 변환합니다.
- 18. awk의 int로 캐스트하기
- 19. PHP, 문자열을 int로
- 20. UUID를 int로 저장하는 방법
- 21. 개체를 int로 변환하는 방법
- 22. float를 int로 변환하는 방법
- 23. 메모리 주소를 int로 변환하십시오.
- 24. 개체를 프리미티브 int로 변환
- 25. 자바 - int로 객체 선택
- 26. C# IntPtr을 int로 변환합니다.
- 27. 변환 열거 int로
- 28. PHP int로 변환
- 29. SPFieldNumber를 int로 변환하는 방법
- 30. Scope_Identity()를 Int로 캐스팅하려면 어떻게해야합니까?
사용한 코드를 게시 할 수 있습니까? –