programing

스캔f() 발행전 C/C++ printf()

powerit 2023. 9. 20. 20:48
반응형

스캔f() 발행전 C/C++ printf()

저는 이클립스를 사용하여 C/C++로 코딩하고 있는데 꽤 쉬운 일이 무엇인지 고민하고 있습니다.아래의 내 코드에서 나는 다음과 같이 사용합니다.printf()그 후에scanf(). 비록printf앞에 적습니다.scanf()생산량이 다릅니다.저는 여기서 비슷한 문제에 대해 알아낼 수 있었습니다.하지만 저는 그것을 풀지 못했습니다.무슨 생각 있어요?

코드:

#include <stdio.h>

int main()
{
    int myvariable;

    printf("Enter a number:");
    scanf("%d", &myvariable);
    printf("%d", myvariable);

    return 0;
}

예상 출력:

Enter a number:1
1

대신에 나는 다음을.

1
Enter a number:1

출력을 버퍼링하고 있습니다.다음 4가지 옵션이 있습니다.

  1. 노골적인 홍조

    fflush각 쓰기가 끝나면 버퍼에서 이익을 얻으면서도 원하는 동작/표시를 명시적으로 시행합니다.

     fflush( stdout );
    
  2. 버퍼를 버퍼 라인 단위로만 사용합니다.

    완전한 선만 인쇄해도 충분하다는 것을 알 때 유용합니다.

     setlinebuf(stdout);
    
  3. 버퍼를 비활성화합니다.

     setbuf(stdout, NULL);
    
  4. 콘솔에서 제공하는 옵션 메뉴를 통해 버퍼링 사용 안 함


예:

다음은 옵션 1의 코드입니다.

#include <stdio.h>
int main() {

    int myvariable;
    
    printf("Enter a number:");
    fflush( stdout );
    scanf("%d", &myvariable);
    printf("%d", myvariable);
    fflush( stdout );

    return 0;
}

여기 2:

#include <stdio.h>
int main() {

    int myvariable;

    setlinebuf(stdout);    

    printf("Enter a number:");
    scanf("%d", &myvariable);
    printf("%d", myvariable);

    return 0;
}

그리고 3:

#include <stdio.h>
int main() {

    int myvariable;

    setbuf(stdout, NULL);     

    printf("Enter a number:");
    scanf("%d", &myvariable);
    printf("%d", myvariable);

    return 0;
}

좋아요, 그래서 마침내 저는 @zsawyer가 3이라는 옵션으로 쓴 것과 비슷한 것을 사용했습니다.내 코드에 다음 행을 삽입했습니다.

setvbuf(stdout, NULL, _IONBF, 0);

주()의 첫 번째 줄로:

#include <stdio.h>

int main()
{
    setvbuf(stdout, NULL, _IONBF, 0);

    int myvariable;

    printf("Enter a number:");
    scanf("%d", &myvariable);
    printf("%d", myvariable);

    return 0;
}

여기서 받았습니다.

언급URL : https://stackoverflow.com/questions/16877264/c-c-printf-before-scanf-issue

반응형