printf 콘솔에서 인쇄 안 함
저는 C 언어를 시작하고 있습니다.나는 이클립스(juno)를 IDE로 사용하고 있으며 CDT 플러그인을 설치했습니다.mingw64(GCC 컴파일러)도 풀었습니다.작동하는지 알아보기 위해 아주 간단한 프로그램을 작성했습니다.내 코드는 다음과 같습니다.
#include <stdio.h>
int main()
{
int age;
printf("Hello, please enter your age:\n");
scanf("%d", &age);
printf("Your age is %d", age);
return 0;
}
가 첫 문는출 버퍼첫의 으로 채워져 입니다.printf
콘솔로 출력하지 않습니다.숫자를 입력해야 합니다. 그러면 버퍼가 모든 데이터를 콘솔에 쏟아붓기 때문에 콘솔에 다음과 같은 내용이 표시됩니다.
1
Hello, please enter your age:
Your age is 1
예상되는 것 대신 다음과 같은 것이는 다음과 같습니다.
Hello, please enter your age:
1
Your age is 1
이제, 저는 제가 사용할 수 있다는 것을 발견했습니다.fflush(stdout)
번째 ▁▁after.printf
하지만 저는 이 해결책이 우아하고 필요하다고 생각하지 않습니다.어떻게 극복할 수 있을까요?
편집 - 대학교에서 배우고 있기 때문에 과정에서 배우지 않은 것은 사용할 수 없으므로 사용만 할 수 있습니다.printf
그리고.scanf
새 편집 - 이에 대한 설명을 찾은 것 같습니다.말씀드린 대로, 저는 이클립스 내부의 콘솔 뷰로 출력하고 있습니다.이상한 것은 Windows 명령줄에서 프로그램을 컴파일하여 실행하면 원하는 결과를 얻을 수 있다는 것입니다.따라서, 저는 이클립스가 실제로 출력물을 파일에 쓰고 콘솔 창에 표시하는 것이라고 생각합니다.실행 구성에서 이클립스가 실제 명령줄 창을 강제로 열려면 어떻게 해야 합니까?
출력이 버퍼링됩니다.
stdout은 기본적으로 라인 버퍼링되며, 이는 '\n'이 버퍼를 플러시하도록 되어 있음을 의미합니다.당신의 경우에는 왜 그런 일이 일어나지 않습니까?몰라.귀하의 애플리케이션/환경에 대한 자세한 정보가 필요합니다.
그러나 setvbuf()를 사용하여 버퍼링을 제어할 수 있습니다.
setvbuf(stdout, NULL, _IOLBF, 0);
그러면 stdout이 라인 버퍼링됩니다.
setvbuf(stdout, NULL, _IONBF, 0);
이렇게 하면 stdout이 강제로 버퍼링 해제되므로 fflush()를 사용할 필요가 없습니다.인쇄물이 많은 경우 응용프로그램 성능에 심각한 영향을 미칩니다.
분명히 이것은 이클립스의 알려진 버그입니다.이 버그는 WONT-FIX의 해결로 해결되었습니다.왜 그런지는 모르겠지만요.여기 링크가 있습니다: Eclipse C 콘솔 버그.
당신은 stdout보다 stderr에게 글을 써볼 수 있습니다.
fprintf(stderr, "Hello, please enter your age\n");
또한 이 관련 스레드를 살펴봐야 합니다.
인쇄하기 전에 설정해 보십시오.
setvbuf (stdout, NULL, _IONBF, 0);
다른 사람들이 지적했듯이 콘솔이나 셸에서 출력을 보기 전에 프로그램 내에서 버퍼링할 수 있습니다.
맥을 포함한 유닉스 계열 시스템에서는stdout
에는 기본적으로 회선 기반 버퍼링이 있습니다.이것은 프로그램이 프로그램을 비운다는 것을 의미합니다.stdout
새 라인을 보는 즉시 버퍼링합니다.
그러나 창에서 새 줄은 더 이상 특별하지 않으며 전체 버퍼링이 사용됩니다.Windows에서는 회선 버퍼링을 전혀 지원하지 않습니다. setvbuf의 msdn 페이지를 참조하십시오.
따라서 창에서는 완전히 차단하는 것이 좋습니다.stdout
이와 같은 버퍼링:
setvbuf (stdout, NULL, _IONBF, 0);
더하다c:\gygwin\bin
로.PATH
환경 변수를 시스템 환경 변수로 사용하거나 Eclipse 프로젝트에서 사용할 수 있습니다(속성 -> 실행/편집 -> 편집).
- 프로젝트 폴더에서 ".gdbinit" 텍스트 파일을 생성합니다.gdb 디버거 구성이 포함됩니다.
- ".gdbinit"를 편집하고 "새 콘솔 설정" 행을 추가합니다(따옴표 없이).
프로젝트를 빌드한 후 아래와 같이 프로젝트 디버그 > "디버그 구성"을 마우스 오른쪽 버튼으로 클릭합니다.
이제 "디버거" 탭에서 "GDB 명령 파일"이 ".gdbinit" 파일을 가리키는지 확인합니다.그렇지 않으면 .gdbinit 구성 파일의 경로를 입력합니다.
"적용" 및 "디버깅"아래와 같이 기본 DOS 명령줄을 시작해야 합니다.
언급URL : https://stackoverflow.com/questions/13035075/printf-not-printing-on-console
'code' 카테고리의 다른 글
@Primary 빈이 존재하는 경우 다른 빈을 생성할 수 있는 이유는 무엇입니까? (0) | 2023.07.22 |
---|---|
자바.java.java잘못된 인수메서드에서 참조된 예외는 클래스 로더에서 볼 수 없습니다. (0) | 2023.07.22 |
클래스 속성과 인스턴스 속성의 차이점은 무엇입니까? (0) | 2023.07.17 |
파이썬에서 클래스를 설계하려면 어떻게 해야 합니까? (0) | 2023.07.17 |
존재하지 않는 문서 키에 대해 Cloud Firestore를 쿼리하는 방법 (0) | 2023.07.17 |