2012-07-01 2 views
0

다음 코드 줄은 문자열, int 및 쉼표로 구분 된 두 개의 double을 읽고 변수에 저장해야합니다.fscanf()는 다른 컴퓨터에서 다르게 작동합니다.

fscanf(f,"%[^,],%d,%Lf,%Lf",name,&id,&east, &north); 

내 Visual Studio 2010 컴파일러에서 작동하며 올바른 값을 읽습니다. 저는 세 개의 숫자에 대해 임의의 값을 가지고 있지만 문자열에 맞는 값을 가진 다른 컴퓨터에서 프로그램을 실행했습니다.

무엇이 될 수 있습니까?

+3

'% Lf'변환 지정자는'long double'을위한 것이지,'double'을위한 것이 아니고,'% lf'은'double'을위한 것입니다. –

+1

'% Lf'은'long double'을위한 것이고'double'은 평범하지 않습니다. Microsoft 컴파일러에서 long double은 double과 같은 크기이지만 다른 컴파일러에는 확장 된 long double double이 있습니다. ID가 실제로 길이가 길지 않고 32 비트/64 비트 불일치가 없다면 int에 무엇이 잘못되었는지 전혀 알 수 없습니다. –

+1

'double '을 읽기 위해'% lf'을 사용하십시오. – ouah

답변

1

%Lflong double이 아니고 double이 아닙니다. Microsoft 컴파일러에서 long doubledouble과 크기와 표현이 같으므로 제대로 작동하지만 코드에서 불일치하는 형식 지정자를 사용하여 정의되지 않은 동작을 호출합니다. %lfdouble을 사용하거나 %Lf을 사용하려면 유형을 long double으로 변경하십시오. 그러면 모든 곳에서 작동합니다.

관련 문제