C 언어 프로그램은 우분투에서 실행될 수 없습니다

C 언어 프로그램은 우분투에서 실행될 수 없습니다

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)

관련 정보