这个程序在.cpp中可以运行,但在.c中显示错误。这是为什么啊?
#include<stdio.h>#include<string.h>
#include<windows.h>
#define N 10 /* 学生人数 */
#define M 4 /* 课程数 */
#define PASS 890508 /* 修改密码 */
void input(); /* 成绩输入 */
void display(); /* 成绩显示 */
void save(); /* 成绩保存 */
void sort(); /* 成绩排序 */
void modify(); /* 成绩修改 */
void statistics(); /* 成绩统计 */
void errorinput(); /* 出错输出 */
struct student /* 成绩数据结构体 */
{
char name;
int num;
float score;
double sum;
}
stud;
char subject_name;
int main()
{
char x;
while(1)
{
system("cls");
printf(" ________________________________________________________\n");
printf(" ******* 班级成绩管理系 *******\n");
printf(" ******\n");
printf(" *** A [ 成绩录入 ] *******\n");
printf(" *******\n");
printf(" *** B [ 成绩显示 ] *******\n");
printf(" *******\n");
printf(" *** C [ 成绩保存 ] *******\n");
printf(" *******\n");
printf(" *** D [ 成绩排序 ] *******\n");
printf(" *******\n");
printf(" *** E [ 成绩修改 ] *******\n");
printf(" *******\n");
printf(" *** F [ 成绩统计 ] *******\n");
printf(" *******\n");
printf(" *** G [ 退出系统 ] *******\n");
printf(" *******\n");
printf(" ________________________________________________________\n");
printf("输入你的选择: ");
scanf("%c",&x);
switch(x)
{
/*case 'a':case 'A':input();
break;
case 'b':case 'B':display();
break;
case 'c':case 'C':save();
break;*/
case 'd':case 'D':sort();
break;
/* case 'e':case 'E':modify();
break;
case 'f':case 'F':statistics();
break;
case 'g':case 'G':return 0;
default:errorinput();
break; */
}
getchar();
}
return 0;
}
void sort() /* 成绩排序 */
{
void swap(int *px,int *py);
int *a;
a=new int;
int i,j;
double tot;
system("cls");
for(i=0;i<N;i++) /* 循环计算总分 */
{
a=i;
for(j=0,tot=0;j<M;j++)
tot=tot+stud.score;
stud.sum=tot;
}
for(i=0;i<N;i++){
for(j=0;j<N-i-1;j++)
if(stud].sum<stud].sum)
swap(&a,&a);
}
printf(" 学号 姓名 总分 \n");
for(i=0;i<N;i++)
printf("%d\t%s\t% .1f \n",stud].num,stud].name,stud].sum);
delete []a;
printf("! 输入任意键退出 !\n");
getchar();
}
void swap(int *px,int *py)
{
int t;
t=*px;
*px=*py;
*py=t;
} new delete 是 C++ 关键字,不能在 C 中使用。 c语言动态申请/释放内存:malloc和free
void *malloc(unsigned int size);
void free(void*a);
注:malloc函数的返回值为所分配连续空间的第一个字节地址 C++与C用的编译器应该是不同的吧?C++是在C的基础上发展起来的,C的程序在C++的编译器上运行,应该是没有问题的,但C++的程序拿到C的编译器上,应该可能会出错。
编译器是根据文件类型来判断是C还是C++程序,它们将.cpp作为C++源程序处理,而将.c作为C语言源程序处理。而C++语言一般可以认为是C语言的超集,也就是说有些语法是只有C++才有的,而C语言是没有用的。
这就好比一座城市,原本我们是很熟悉的,几年后,经过了改造,我们再去,就未必能轻车熟路 .c 是C语言的文件后缀
.cpp 是 C++语言文件后缀 C中无new。只有C++有new。
页:
[1]