различное поведение xcode и Dev-C ++ - PullRequest
1 голос
/ 31 января 2012

Я только начинаю изучать C.
, если я скомпилирую следующий код в Dev-C ++, программа будет работать нормально.
Если я скомпилирую в Xcode 3.2.6, это будет похоже на скриншот.
Я пыталсяразличные настройки компилятора в XCode, но поведение остается тем же.
Есть идеи по этому поводу?

 #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;
 }

Ответы [ 4 ]

4 голосов
/ 31 января 2012

Полагаю, это связано с оператором system("PAUSE");.Xcode используется в OSX, который является вариантом UNIX, и не имеет команды pause.

Вместо этого, почему бы просто не попросить пользователя вместо этого вручную нажать клавишу ввода?Вот так:

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

Преимущество работы в большинстве систем.

3 голосов
/ 31 января 2012
fflush(stdin);   

Вызывает неопределенное поведение , и, следовательно, ваша программа демонстрирует различное поведение на разных компиляторах.

Ссылка C стандарт:

int fflush(FILE *ostream);

ostream указывает на выходной поток или поток обновления, в который не была введена самая последняя операция, функция fflush заставляет любые неписанные данные для этого потока быть доставленными в хост-среду для записи в файл; в противном случае поведение не определено.

0 голосов
/ 31 января 2012

Включите заголовочный файл Conio.h и используйте функцию getch() всякий раз, когда вы хотите удерживать экран.

0 голосов
/ 31 января 2012

PAUSE - это Windows, а не команда Unix ... так что она не будет работать на Mac. Вместо этого используйте что-то вроде getchar(), если вы просто хотите приостановить программу в конце.

...