2014-04-26 2 views
0

에서이 동작을 시뮬레이션 할 수 fscanf 또는 C fgets를 사용하는 간단한 방법이 있나요 :시뮬레이션 C++의 >> 연산자 C

한다고 가정 I는 다음과 같이 구성되어 파일이 있습니다

정수 \의 t 문자열을 \ t 배

정수 \의 문자열 \의 이중

나는 struct에 입력 그것은이 상황에서 fscanf 적용 할 수있는 방법이 있나요?

나는 내 fscanf에서 여러 개의 정규 표현식을 사용해 보았고 내가해야 할 일을 성취하지 못했습니다.

나는 구조체는 다음과 같이 할 것이다 : 그 3 개 요소

struct foo { 
    int first; 
    char * second; 
    double third; 
}; 

다음 fscanf을.

+2

'fscanf()'는 정규식을 허용하지 않습니다. 'fgets()'로 전체 라인을 읽고, 구조체 멤버로 파싱한다. 문자열에 대해'malloc()'메모리를 기억하십시오! – pmg

+0

C++에서조차도 이렇게하려면 함수를 작성해야하므로 구조체 데이터를 입력하는 함수를 작성하십시오 (그리고 'second'에 공간을 할당해야합니다). – ooga

+0

아, 고맙습니다. scanf ("% [^ \ n]", str); ' –

답변

2

fscanf를 사용하여 구조체의 데이터를 읽는 방법입니다.

struct foo Foo; 
Foo.second = malloc(10); // max string size 
fscanf(fp, "%d %s %lf", &Foo.first, Foo.second, &Foo.third); 

여기서 fp는 열린 파일의 FILE *입니다.

%s은 다음 공백 문자까지 문자열을 검색합니다. 공백 문자를 문자열의 일부로 포함 시키려면 구분 기호의 작동 방식을 다시 정의하고 RegEx를 사용하거나 자체 파싱 기능을 작성해야합니다.

나중에 참조 용으로 fscanf()을 사용하는 방법에 대한 설명서는 here입니다. 여기에는 모든 스캔 문자열과 작동 방법이 포함됩니다.

+0

먼저'second'를 초기화해야합니다. – sepp2k

+0

고마워, 나는 그저 나 자신을 붙 잡았다. – Daniel

+0

와우, 나는이 방법을 지나치게 복잡하게 만들었다. –