鱼C论坛

 找回密码
 立即注册
查看: 1538|回复: 5

这个程序在.cpp中可以运行,但在.c中显示错误。这是为什么啊?

[复制链接]
发表于 2020-7-5 10:00:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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[10];
int num;
float score[M];
double sum;
}
stud[N];
char subject_name[N][10];
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[N];
int i,j;
double tot;
system("cls");
for(i=0;i<N;i++) /* 循环计算总分 */
{
   a[i]=i;
   for(j=0,tot=0;j<M;j++)
     tot=tot+stud[i].score[j];
stud[i].sum=tot;
}
for(i=0;i<N;i++){
   for(j=0;j<N-i-1;j++)
     if(stud[a[j]].sum<stud[a[j+1]].sum)
       swap(&a[j],&a[j+1]);
}
printf(" 学号   姓名   总分 \n");
for(i=0;i<N;i++)
   printf("%d\t%s\t% .1f \n",stud[a[i]].num,stud[a[i]].name,stud[a[i]].sum);
delete []a;
printf("! 输入任意键退出 !\n");
getchar();
}
void swap(int *px,int *py)
{
int t;
t=*px;
*px=*py;
*py=t;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-5 10:15:20 | 显示全部楼层
new delete 是 C++ 关键字,不能在 C 中使用。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-29 10:01:02 | 显示全部楼层
c语言动态申请/释放内存:malloc和free
void *malloc(unsigned int size);
void free(void*a);
注:malloc函数的返回值为所分配连续空间的第一个字节地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-29 11:47:17 | 显示全部楼层
      C++与C用的编译器应该是不同的吧?C++是在C的基础上发展起来的,C的程序在C++的编译器上运行,应该是没有问题的,但C++的程序拿到C的编译器上,应该可能会出错。

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

      这就好比一座城市,原本我们是很熟悉的,几年后,经过了改造,我们再去,就未必能轻车熟路
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-29 15:55:20 | 显示全部楼层
.c 是  C语言的文件后缀
.cpp 是 C++语言文件后缀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-29 16:10:24 | 显示全部楼层
C中无new。只有C++有new。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 10:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表