2014-10-14 2 views
0

내가 왜이 printf와 함께 0.000000 얻을 모든 아이디어? 나는 파일을 확인하고는 +으로 열린 스트림에 작성하고 먼저 출력을 세척 할 필요가 같은 스트림에서 읽으려면fscanf가 파일에서 double을 읽지 않습니다. 파일은 괜찮습니다

#include <stdio.h> 
#include <stdlib.h> 

int main(void) 
{ 
    double doub1; 
    FILE *p; 
    if((p=fopen("data.txt","wb+"))==NULL) 
     puts("no"); 
    fprintf(p,"%[email protected]%lf\n%lf%s",3.9458,314.32133,32.3,"hello"); 
    fscanf(p,"%lf",&doub1); 
    printf("%lf",doub1); 
} 
+0

파일을 열지 못하면 어쨌든 읽고 쓰려고하는 대신 종료해야합니다. –

+0

'fscanf()'의 결과를 확인하십시오. '1'이 아니라면'printf ("% lf", doub1);'는 의미가 없습니다. – chux

+0

Note : 코드가 텍스트를 읽고 쓰고 있기 때문에''b''를''wb + ''에 놓는 것이 좋습니다. – chux

답변

2

잘 작성 : 그러나이 위치를 변경하지 않습니다

fflush(p); 

을 파일 위치 지시자. 이미 작성한 글자를 읽으려면 다시 찾아야합니다. 당신이 fseek을하고 있다면 당신은 fflush을 할 필요가 없습니다

fseek(p, 0, SEEK_SET); // go to start of file 

fseek 암시 적 플러시를 수행합니다 읽기와 쓰기에 대한 별도의 파일 위치 표시가 없습니다.

또한 출력을 인쇄하기 전에 fscanf의 반환 값을 확인해야합니다. 검사가 실패하면 초기화되지 않은 변수가 인쇄됩니다.

관련 문제