2012-02-08 2 views
1

간단한 파일 입력을 위해 fscanf를 사용하는 데 익숙합니다. 그래도 스트림으로 이동하기 위해 노력하고있어 나는이 작업을 수행 할 수 있도록하고 싶습니다 : 당신이 그것을 스틱, 파일을 읽어 상대적으로 쉽게 볼 수스트림에 대한 fscanf 유형 함수는 무엇입니까?

fscanf(file, %d %s, int1, str1); 

최초의 하나에 건너 int로 컨테이너, 그리고 첫 번째 문자열을 char *로 변환합니다. 필자가 원하는 것은 스트림 함수를 사용하여 fstream으로이 작업을 수행하는 것입니다. 이것은 제한된 스트림 지식으로 내가 생각해 낸 것입니다.

while((fGet = File.get() != EOF)) 
{ 
    int x; 
    int y; 
    bool oscillate = false; 
    switch(oscillate) 
    { 
    case false: 
     { 
      x = fGet; 
      oscillate = true; 
      break; 
     } 
    case true: 
     { 
      y = fGet; 
      oscillate = false; 
      break; 
     } 
    } 
} 

기본적으로 파일을 스캔하여 첫 번째 int를 x에 넣고 두 번째를 y에 넣기를 원합니다.

당신이 말할 수있는 것처럼 이것은 몇 가지 이유로 매우 나쁘지 만, 실제로 이것을 사용하지는 않겠지 만 생각할 수있는 전부입니다. 이 문제를 해결할 더 좋은 방법이 있습니까?

+0

초기 설명에 int와 char *가 있지만 의사 코드에 int가 두 개있는 이유는 무엇입니까? –

+0

@Matt. 그것은 정말로 그것입니다. 나는 단지 다른 것처럼 느꼈다. – Jcrack

+0

@MooingDuck : 나는 일반적으로 해결책에 동의하지만,'str1'이'char * '로 선언되면'if (in >> int1 >> std :: setw (size)) >> str1) {...}'. 물론,'fscanf()'의 사용은 비슷한 문제가 있습니다 만,'char *'에 대한 입력은 size가 제약이 없다면'gets()'와 실질적으로 동일하다는 것을 알아 두는 것이 중요하다고 생각합니다. –

답변

5

은 당신이해야 할 모든

int x, y; 
File >> x >> y; 

그리고

fscanf(file, "%d %s", &int1, str1); 

하는 것과 동일합니다, 스트림에서 두 개의 정수를 읽어

int x; 
string s; 

file >> x >> s; 

되고 있는지 확인하려면, 당신 경우 읽기 작업 여부를 확인하려면 읽기 상태를 다음 조건에 넣으십시오.

if (file >> x >> s) 

또는

while (file >> x >> y) 

이든

.

+0

정말요? 그거 쉽지? 그게 내가 생각한 것보다 간단 해. 감사합니다 – Jcrack

+0

@ Jcrack : 스트림을 기본 방식으로 읽고 쓰는 것이 printf보다 쉽습니다. 포맷을 원한다면 ... 좀 더 자세한 것이지만 이해하기 쉽습니다. C++은 C++보다 프로그래밍이 쉬우 며 에러가 발생하기 쉽습니다. –

+0

... >> 연산자가 자동으로 캐스트를 입력합니까? char 나 stream으로 많은 수의 숫자를 읽어야 할 필요가 있다면 어떻게해야할까요? 이것이 어떻게 성취되어야 하는가? – Jcrack