刚开始学习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;
}
答案 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()
功能。