int a; fstream fs("bla~"); fs >> a;
이랬는데, bla~의 내용에 정수가 아닌 캐릭터가 있다고 합시다 ㅎ
그러면 a의 값은 아무 변화가 없더군요;
이럴 경우 a에 특정 값을 넣어주려고 하는데, 그럼 결과에 대한 flag가 있어야 할 것 같은데.. (그리고 있을 것 같은데..)
못찾겠네요 :oops:
이런 표준 클래스에 대한 man은 없나요? 우웅..
try-catch로 잡을 수도 있나요? 으음..
in >> a; if(1 == in.fail()){a=bla;}
이 경우 failbit말고, badbit가 설정될 때에도 a가 bla로 설정되니.. 각각 예외를 catch하고 싶어졌어요 ㅎㅎ
if (!(fs >> a)) // input failed
에러가 발생한 이후, 스트림의 상태가 어떻게 되었는지 모르겠네요;;
int형으로 받는 것 실패하고, string으로 이어서 받으려하니, 아무것도 못받네요;
if(!(fs >>a)) { string temp; fs >> temp; cout << temp; }
temp가 비어있어요~ 흑.. 그리고 저것이 루프로 돌아가는데, 실패가 발생한 이후 부터 스트림에서 못 읽어오는 것 같습니다;
어떻게 처리해야하나요? 실패한 부분(token?)만 넘어가면 되는데..
입출력 중 에러가 발생하면 스트림의 failbit 또는 badbit가 켜지고 그 이후로는 모든 입출력이 중단됩니다. basic_ios::clear()를 써서 스트림의 상태를 복구하면 다시 입출력을 재개할 수 있습니다. (badbit가 켜진 경우에는 정상적인 동작을 기대할 수 없음)
if (!(fs >>a)) { fs.clear(); string temp; fs >> temp; cout << temp; }
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
이렇게 했는데, 더 나은 방법은 없을까요?
try-catch로 잡을 수도 있나요? 으음..
이 경우 failbit말고, badbit가 설정될 때에도 a가 bla로 설정되니.. 각각 예외를 catch하고 싶어졌어요 ㅎㅎ
[code:1]if (!(fs >> a
이런 식으로 씁니다. fs >> a는 fs의 참조를 반환하고 이것을 boolean 식에 쓰면
입력이 성공했을 때 true가 됩니다. 입력이 실패했을 때 예외를 던지는 것은 좀 과하지
않을까 하는 생각이 드네요. 뭐, 상황에 따라 달라지겠지만요.
에러가 발생한 이후 어떻게 되는건가요?
에러가 발생한 이후, 스트림의 상태가 어떻게 되었는지 모르겠네요;;
int형으로 받는 것 실패하고, string으로 이어서 받으려하니, 아무것도 못받네요;
temp가 비어있어요~ 흑.. 그리고 저것이 루프로 돌아가는데, 실패가 발생한 이후 부터 스트림에서 못 읽어오는 것 같습니다;
어떻게 처리해야하나요? 실패한 부분(token?)만 넘어가면 되는데..
입출력 중 에러가 발생하면 스트림의 failbit 또는 badbit가 켜
입출력 중 에러가 발생하면 스트림의 failbit 또는 badbit가 켜지고 그 이후로는
모든 입출력이 중단됩니다. basic_ios::clear()를 써서 스트림의 상태를 복구하면
다시 입출력을 재개할 수 있습니다. (badbit가 켜진 경우에는 정상적인 동작을
기대할 수 없음)
댓글 달기