不同的行为xcode和Dev-C ++

时间:2012-01-31 13:50:32

标签: c xcode3.2

刚开始学习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 个答案:

答案 0 :(得分:4)

我的猜测是它与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);

它具有在大多数系统上工作的优势。

答案 1 :(得分:3)

fflush(stdin);   

导致未定义的行为,因此您的程序在不同的编译器上显示不同的行为。

参考C标准:

int fflush(FILE *ostream);
  

ostream指向未输入最新操作的输出流或更新流,fflush函数会将该流的任何未写入数据传送到主机环境以写入该文件; 否则,行为未定义。

答案 2 :(得分:0)

PAUSE是一个Windows,而不是一个Unix命令......因此无法在Mac上运行。如果您只是想在最后暂停程序,请使用类似getchar()的内容。

答案 3 :(得分:0)

包含标题文件Conio.h并在您想要屏幕时使用getch()功能。