openlang

float일 때는 맞는 값이 나오는데 C 프로그램에서 double로 바꾸면 왜 항상 0이 나오나요?

float를 쓸 때 프로그램은 이렇습니다:

#include <stdio.h>

int main() {
    float result;
    float input;
    scanf("%f", &input);
    result = input / .25;
    printf("%f", result);
    return 0;
}

값으로 3을 입력하면 12.000이 출력됩니다. 그런데 float를 double로 바꾸면 항상 0.000이 나옵니다. 제가 뭘 놓치고 있나요?

영어에서 번역원문 보기

이어지는 대화 2

서로의 근거를 따라
  1. 고유 링크

    double 입력을 다루는 이 질문 (https://stackoverflow.com/questions/33269283/scanf-not-reading-in-double)에서 설명하듯이,

    컴파일러에 잘못 말한 겁니다. 입력에서 %f는 float를 가리키는 포인터를 주겠다는 뜻입니다. 실제로 넘긴 건 double를 가리키는 포인터였고요.

    %lf로 바꾸거나 입력 변수를 float로 선언하세요.

    printf의 형식 규칙은 다르다는 점에 유의하세요. float와 double 인수 모두에 %f를 받습니다. 이쪽은 인수가 포인터가 아니라 double로 승격되기 때문에 가능합니다.

    영어에서 번역원문 보기

같은 질문의 다른 갈래

  1. 다른 클래스 안에 있는 클래스를 상속하려면 어떻게 하나요?

    안녕하세요, 제가 코드를 바꿀 수 없는 패키지에 다음과 같은 클래스 계층이 있어요: 편하게 쓰려고 Inner를 감싸는 래퍼를 추가하려는데, Inner가 바깥 인스턴스에 의존해서 지금까지는 바깥 클래스의 서브클래스 안에 넣는…

    답글 1최근 활동 scala
  2. Lean4의 have 바인딩과 let 바인딩 비교

    아래 두 표현식을 보니 그리고 똑같이 동작하더군요. 정리를 증명할 때도 마찬가지예요. 서로 바꿔 써도 되나요? 차이가 뭔가요?

    답글 3최근 활동 lean-4
  3. 문자열 배열을 값으로 갖는 TypeScript Map 초기화

    각 항목이 문자열 배열을 담는 Map을 만들고 있어요. 타입 선언과 초기화를 한 문장으로 같이 하려면 어떻게 하나요? 제 (단순한) 시도는 이랬어요: 그랬더니 이렇게 나와요:

    답글 2최근 활동 typescript