赞赞麋 发表于 2020-7-5 10:00:54

这个程序在.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;
}

永恒的蓝色梦想 发表于 2020-7-5 10:15:20

new delete 是 C++ 关键字,不能在 C 中使用。

昨非 发表于 2020-7-29 10:01:02

c语言动态申请/释放内存:malloc和free
void *malloc(unsigned int size);
void free(void*a);
注:malloc函数的返回值为所分配连续空间的第一个字节地址

风过无痕1989 发表于 2020-7-29 11:47:17

      C++与C用的编译器应该是不同的吧?C++是在C的基础上发展起来的,C的程序在C++的编译器上运行,应该是没有问题的,但C++的程序拿到C的编译器上,应该可能会出错。

      编译器是根据文件类型来判断是C还是C++程序,它们将.cpp作为C++源程序处理,而将.c作为C语言源程序处理。而C++语言一般可以认为是C语言的超集,也就是说有些语法是只有C++才有的,而C语言是没有用的。

      这就好比一座城市,原本我们是很熟悉的,几年后,经过了改造,我们再去,就未必能轻车熟路

mzx666 发表于 2020-7-29 15:55:20

.c 是C语言的文件后缀
.cpp 是 C++语言文件后缀

405794672 发表于 2020-7-29 16:10:24

C中无new。只有C++有new。
页: [1]
查看完整版本: 这个程序在.cpp中可以运行,但在.c中显示错误。这是为什么啊?