2012-01-31 2 views
1

Dev-C++에서 다음 코드를 컴파일하면 C를 익히기 시작합니다.
프로그램이 올바르게 실행됩니다.
Xcode 3.2.6에서 컴파일하면 스크린 샷처럼 보입니다.
Xcode에서 다른 컴파일러 설정을 시도했지만 동작은 동일합니다.
이것에 대한 아이디어가 있으십니까?다른 동작 xcode 및 Dev-C++

#include <stdio.h> 
#include <stdlib.h> 

int main(int argc, char *argv[]) 
{ 
    char artist[30]; 
    char album[30]; 
    int tracks; 
    char albumsingle; 
    float price; 

    printf("Please enter CD informations below. \n \n"); 

    printf("enter cd artist: "); 
    scanf("%[^\n]", artist); 

    printf("enter cd title: "); 
    fflush(stdin); 
    scanf("%[^\n]", album); 

    printf("enter no. of tracks: "); 
    fflush(stdin); 
    scanf("%d", &tracks); 

    printf("enter a for album s for single: "); 
    fflush(stdin); 
    scanf("%c", &albumsingle); 

    printf("enter price: "); 
    fflush(stdin); 
    scanf("%f", &price); 



    printf("\n\n\nartist: %s\n", artist); 
    printf("album: %s\n", album); 
    printf("track no.: %d\n", tracks); 
    if (albumsingle == 'a'){ 
     printf("cd type: album\n"); 
    } else { 
     printf("cd type: single\n"); 
    } 

    printf("price: %.2f EUR\n\n", price);         

    system("PAUSE"); 
    return 0; 
} 
+0

어떤 스크린 샷이 있습니까? 스크린 샷을 추가하는 대신 질문에 오류 메시지를 추가하거나 예상 출력과 실제 출력을 추가하십시오. –

답변

3
fflush(stdin); 

정의되지 않은 동작 원인, 따라서 프로그램은 다른 컴파일러에 다른 동작을 보여줍니다.

참조 C 표준 : 해당 스트림을 전달하기위한 출력 스트림 또는 가장 최근의 동작이 입력되지시킨 업데이트 스트림

int fflush(FILE *ostream); 

ostream에 포인트는 FFLUSH 함수는 기록되지 않은 데이터를 야기 파일에 기록 될 호스트 환경으로; 그렇지 않으면 동작이 정의되지 않습니다.

+1

정답입니다. 두 컴파일러는 모두 C 표준을 따르며 프로그램에서 정의되지 않은 동작이 호출 될 때 임의의 종류의 임의 결과를 제공하기 때문에 올바르게 동작합니다. 또한 [C FAQ] (http://c-faq.com/stdio/stdinflush.html)를 참조하십시오. – Lundin

4

내 생각에 system("PAUSE"); 문과 관련이 있습니다. Xcode는 OSX에서 사용되며 UNIX 변형이며 pause 명령이 없습니다.

대신 사용자가 수동으로 Enter 키를 누르라고 요청하지 않는 이유는 무엇입니까? 이와 같이 :

printf("Press the ENTER key to continue.\n"); 
int c; 
do 
{ 
    c = fgetc(stdin); 
} while (c != '\n' && c != EOF); 

대부분의 시스템에서 작동하는 장점이 있습니다.

0

PAUSE은 Windows입니다. 유닉스 명령이 아닙니다 ... 그래서 Mac에서는 작동하지 않습니다. 마지막에 프로그램을 일시 중지하려면 getchar()과 같은 것을 사용하십시오.

0

Conio.h 헤더 파일을 포함하고 화면을 잡고 싶을 때마다 getch() 기능을 사용하십시오.

관련 문제