2014-01-15 2 views
0

파일에서 부동 소수점 숫자를 선택하고 싶습니다. 나는이 방법으로 난 단지 정수를 얻을 것을 보았다 그러나 다음파일에서 부동 소수점 숫자를 선택하십시오.

while ((ch= getc(fp)) != EOF) 
{ 
    if(isdigit(ch)) 
     //do some stuff 
} 

(하지만 난 플로트를 원하는) : 내가 해결책으로 생각하면이 있었다. 그래서 나는 그것을 보면서 나는이 발견 : 나는 또한 fscanf()의 그것이라고 무엇보다도 정의를 보았다

while((fscanf(fp, "%lf", &n) == 1) 
    //do some stuff 

..

반환 값 성공시

의 함수는 성공적으로 채워진 인수 의 항목 수를 반환합니다. 이 수는 항목의 예상 수와 일치하거나 일치하는 실패, 읽음 오류 또는 파일 끝 도달으로 인해 0보다 작을 수 있습니다.

을 읽는 동안 읽기 오류가 발생하거나 파일 끝에 도달하면 적절한 표시기가 설정됩니다 (feof 또는 ferror). 그리고 데이터가 성공적으로 읽히기 전에 이 발생하면 EOF가 반환됩니다.

넓은 문자를 해석 할 때 인코딩 오류가 발생하면 함수는 errno를 EILSEQ로 설정합니다.

그러나 나는 while((fscanf(fp, "%lf", &n) == 1)을 이해하지 못합니다. fscanf()이 float 값을 읽으면 1을 반환하고, 그렇지 않으면 다른 것을 반환 할 것입니까?

+0

"선택"이라고 할 때, 건너 뛰려는 파일에 더 많은 부동 소수점 데이터가 있음을 의미합니까? – unwind

+0

글쎄, 내가 생각한 질문을 썼을 때, 나는 더 신중하게 내가 가진 운동과 그 다음의 해결책을 다시 읽었고, 프로그램이 숫자를 선택하고 그 결과가 플로트 타입으로 인쇄된다. 그러나 내가 그걸 어떻게 할 수 있는지 궁금 해서요. (부동 소수점 만 선택하십시오). – yaylitzis

답변

2

코드에서 fscanf 호출은 하나의 부동 소수점 값을 읽고 변환하는 경우 1을 반환합니다. 두 번 전환 (예 : "%lf %d")을 요청하는 형식 인 경우 성공을 위해 2을 반환했을 것입니다. 즉, 형식 문자열에 성공적으로 파싱 된 % 형식의 수를 반환합니다. 입력이면

하지 부동 소수점 수는 다음 fscanf0를 반환하며, 따라서 루프가 종료된다. 또는 오류가 있거나 파일의 끝에 도달하면 EOF이 반환되어 루프가 중단됩니다.

+0

fscanf (루프 중에, 1) 결과를 인쇄하고 문자를 넣을 경우 0을 반환하고 루프에서 종료됩니다. 당신이 2를 반환 하는지를 말했을 때 나는이'while (fscanf (fp, "% lf % d", & n) == 1'을 시도했지만 경고를 받았다. '경고 : format'% d '는 'int *'argument'와 일치 함 – yaylitzis

+0

'fscanf()'의 @Nat95는'% d '에 의해 얻어진 값을 보유 할 변수를 제공합니다.'% if'는'& n'을가집니다. –

+0

예 ~ 맞습니다! – yaylitzis

관련 문제