cin
이 입력 데이터와 읽으려는 변수 사이에 유형 불일치가 있으면 "실패"상태가됩니다. 충돌하는 변수는 업데이트되지 않습니다. 관찰 :
2010-02-27 22:54:27 ~/tmp/ $ cat ju3.cpp
#include <iostream>
using namespace std;
int main() {
int x = 0;
int y = 12345;
string s, a;
printf("cin good? %d, reading...\n", cin.good());
cin >> a >> x >> y >> s;
printf("a=%s, x=%d, y=%d, s=%s\n", a.c_str(), x, y, s.c_str());
printf("... read, cin good? %d\n", cin.good());
return 0;
}
2010-02-27 22:54:36 ~/tmp/ $ g++ ju3.cpp -o ju3
2010-02-27 22:54:56 ~/tmp/ $ echo 1 2 3 4 | ./ju3
cin good? 1, reading...
a=1, x=2, y=3, s=4
... read, cin good? 1
2010-02-27 22:55:05 ~/tmp/ $ echo a x y z | ./ju3
cin good? 1, reading...
a=a, x=0, y=12345, s=
... read, cin good? 0
표시되는 문제를 피하는 데는 두 가지 방법이 있습니다.
- 더러운 빠른 앤 솔루션은 대신
-1
에 숫자를 비교하는 cin.good()
를 확인하는 것입니다.
cin
이 더 안정적으로 작동하게하려면 int
대신 string
s를 읽고 숫자 문자 만 포함하는지 수동으로 확인하십시오. 그런 다음 stringstream
을 사용하여 문자열을 쉽게 숫자로 변환 할 수 있습니다.
귀하의 문제를 이해하지 못합니다. 'n'을 입력하면 작동하지 않습니까? 마지막에는 'n'도 숫자이므로 이상합니다. 2sd 코드에 루프가 없으면 어떻게하면 무한 루프가 발생할 수 있다고 생각합니까? –
프로그램을 실행할 때 두 개의 숫자를 공백으로 구분하여 입력해야합니다 (x 및 y). 그러나 편지와 같은 다른 내용을 입력하면 프로그램이 무한 루프가됩니다. 그래서 사용자가 두 개의 숫자 만 입력했는지 확인하기 위해 입력을 확인하려고합니다. – cornjuliox