programing

c의 scanf를 사용하여 이중 값 판독

kingscode 2022. 8. 25. 22:15
반응형

c의 scanf를 사용하여 이중 값 판독

C에서 scanf()를 사용하여 2개의 값을 읽으려고 하는데 시스템이 메모리에 쓰는 값이 입력한 값과 같지 않습니다.코드는 다음과 같습니다.

double a,b;
printf("--------\n"); //seperate lines
scanf("%ld",&a);
printf("--------\n"); 
scanf("%ld",&b);
printf("%d %d",a,b);

1과 2를 입력하면 CMD가 올바른 값을 반환하지만 b = -858993460은 이미 시도했습니다. 이중 대신 float 또는 int 사용, scanf_s 사용, %i 또는 %li, %lf 또는 %e 또는 %g에 대해 scanff%d 또는 %f 사용, flush(stdin)를 사용하여 키보드 버퍼를 클리어하고 가능한 모든 조합으로 읽습니다.32비트 OS의 double 길이에 문제가 있어 scanf("%lf")와 &f를 사용하여 double을 읽어야 한다는 것을 알게 되었습니다.내가 무엇을 하든, 두 번째 값은 항상 틀립니다.

Windows 7 32비트 OS에서 데스크톱용 MS VS Express 2012를 사용하고 있습니다.

를 사용합니다.%lf형식 지정자를 사용하여 이중을 읽습니다.

double a;
scanf("%lf",&a);

Wikipedia에는 사용 가능한 형식 지정자에 대한 적절한 참조가 있습니다.

를 사용해야 합니다.%lf형식 지정자를 사용하여 결과도 출력합니다.

printf("%lf %lf",a,b);

제가 아는 한,%d소수점이 없는 숫자인 십진수를 의미합니다.이중 값을 로드하려면%lf변환(롱 플로트).같은 이유로 당신의 가치가 틀렸다면%d는 정수(사용 방법을 알고 있는 경우는 문자도 포함) 번호에만 사용됩니다.

예:

double a,b;
printf("--------\n"); //seperate lines
scanf("%lf",&a);
printf("--------\n"); 
scanf("%lf",&b);
printf("%lf %lf",a,b);

잘못된 포맷 시퀀스를 사용하고 있습니다.double, 를 사용해 주세요.%lf대신%ld:

double a;
scanf("%lf",&a);

형식 지정자printf그래야 한다%f위해서doubl이후 데이터 유형float데이터틸은 최종적으로 로 변환된다.double내부 데이터 유형printf.

인쇄할 조항이 없습니다.floatdata. double in printf의 올바른 형식 지정자.

두 번째 값을 스캔할 때는 다음 코드 행을 사용합니다.scanf(" %lf", &b);또한 모든 %ld를 %lf로 교체합니다.

입력 스트림 버퍼와 관련된 문제입니다.fflush(stdin)를 사용할 수도 있습니다. 첫 번째 스캔 후 입력 버퍼를 지운 다음 두 번째 스캔f가 예상대로 작동합니다.또는 첫 번째 scanf 행 뒤에 getch(); 또는 getchar(); 함수를 배치하는 방법도 있습니다.

사용.%lf이 문제를 해결하는 데 도움이 됩니다.

사용방법:

scanf("%lf",&doub)

언급URL : https://stackoverflow.com/questions/13730188/reading-in-double-values-with-scanf-in-c

반응형