c에서 짝수와 홀수를 찾는 간단한 코드를 작성했습니다.
#include <stdio.h>
int main() {
int num;
printf("Enter an integer: ");
scanf(" %d", &num);
(num % 2 == 0) ? printf("%d is even.", num) : printf("%d is odd.", num);
return 0;
}
코드는 멈추지 않고 실행되기 시작하고 다음과 같은 메시지를 표시합니다.
[Running] cd "/home/atharva/Projects/c c++/" && gcc Even_odd.c -o Even_odd && "/home/atharva/Projects/c c++/"Even_odd
나는 우분투를 사용하고 있습니다. 무엇을 해야 합니까?
답변1
프로그램이 실행 중이지만 출력이 버퍼링되어 있으므로 프로그램의 출력이 표시되지 않습니다.
printf()
출력 문자열 이 끝에 개행 문자로 구분되지 않기 때문에 출력이 버퍼링됩니다 . 표준 라이브러리는 개행 문자가 출력될 때까지 또는 fflush()
출력 스트림을 명시적으로 호출할 때까지 출력을 버퍼링합니다. 이 버퍼링은 효율성을 위해 수행됩니다.
한 가지 해결책은 끝에 개행 문자를 사용하여 문자열을 출력하는 것입니다.
printf("Enter an integer:\n");
...또는 명시적으로 호출합니다 fflush()
.
printf("Enter an integer: ");
fflush(stdout);
하지만, 그옳은이를 수행하는 방법은 대부분의 다른 Unix 유틸리티와 마찬가지로 표준 오류 스트림에서 사용자 상호 작용을 위한 텍스트를 출력하는 것입니다.
fprintf(stderr, "Enter an integer: ");
기본적으로 표준 오류 스트림은 버퍼링되지 않습니다.
코드의 다른 명령문도 printf()
동일한 문제를 겪고 있으며 출력하는 문자열에 개행 문자를 추가해야 할 것입니다(사용자 상호작용 메시지가 아닌 결과를 출력하기 때문입니다).
또한보십시오:
답변2
귀하의 예는 명령줄에서 저에게 효과적입니다.
Even_odd.c
다음 에 코드를 복사하세요 .
make Even_odd # A quicker alternative to "gcc Even_odd.c -o Even_odd"
./Even_odd
Enter an integer:
실제로 명령줄에서 실행하지 않는 경우 fflush(stdout)
및 printf
사이에 추가 해야 할 수도 있습니다 sscanf
. 이 때문입니다표준 출력라인 버퍼링되어 있으며 입력이 요청될 때까지 라인이 터미널에 플러시(기록)되지 않을 수 있습니다 sscanf
.
\n
결과 문자열 끝에 추가하는 것을 잊지 마세요 . 예를 들면 다음과 같습니다.printf("%d is even.\n", num)