2014-05-09 2 views
2

I 입력 5 개 회선이 있고 난 단지 그 두 가지를 사용하여 신경 (그들은 텍스트 파일에있어) :scanf를 사용하여 입력 데이터의 다음 줄에서 입력을 얻으려면 어떻게해야합니까?

1 -- input function one 
L 123.0 21.0 
2 -- input function 2 
2.0 3.0 
3.0 2.0 

내가 첫 번째 줄에서 1를 사용하려면, 다음 내가 원하는 내가 라인 2를 사용 한 후 3

가 다시 나는이 라인과 사용 라인의 끝으로 건너 뛸 내가 수를 줄 2을 읽을 수 2

라인으로 넘어가 네와 다섯.

저는 getchar(), scanf, if 및 while을 사용하여이 작업을 수행 할 수 있습니다. 여기 내 코드의 일부입니다. 단지 작동 시키려고합니다. 나는 그런

scanf("%d -- input function one\n", &j) 

을 넣으면

int 
main(int argc, char *argv[]) { 
    char ch; 
    int j; 
    if(scanf("%d", &j) == 1){ 
     printf("Got %d lines\n", j); 
    } 
    scanf("%c", &ch); 
    printf("%c", ch); 
    return 0; 
} 

내가 할 위치를 결국 있지만 경우에 '-'물건 ' "는 scanf에서 % D 후 정확한 문구입니다 .

줄 끝까지 건너 뛸 수있는 방법이 있습니까? 출력을 얻을 :

있어 1 개 라인

L

답변

3

것은 여기 내 제안합니다.

// Read 1 from the first line. 
if(scanf("%d", &j) == 1){ 
    printf("Got %d lines\n", j); 
} 

// Read the rest of the line but don't 
// save it. This is the end of the first line 
scanf("%*[^\n]s"); 

// Read the next line but don't save it. 
// This is the end of the second line. 
scanf("%*[^\n]s"); 

// Now read the 2 from the third line. 
if(scanf("%d", &j) == 1){ 
    printf("Got %d lines\n", j); 
} 

// Read the rest of the line but don't 
// save it. This is the end of line 3 
scanf("%*[^\n]s"); 

// Now the fourth line can be read. 

업데이트

의 선

scanf("%*[^\n]s"); 

은해야뿐만 아니라 '\n'를 소비하기 위해

scanf("%*[^\n]s\n"); 

.

+0

"% * [^ \ n] s"이 (가) 무엇인지 모르겠지만 이것이 효과가있는 것 같습니다. – Doogesle

+0

'*'한정자의 의미 : "선택적 시작 별표는 데이터가 스트림에서 읽히지 만 무시됩니다 (즉, 인수가 가리키는 위치에 저장되지 않음)." –

+0

"[^ \ n] s"의 의미 :''\ n ''이 아닌 모든 문자를 읽고' '\ n' '에서 멈 춥니 다. –

관련 문제