C语言 冒泡排序编译出错

#include <stdio.h>
struct discussion_record
{
int record_ID[20];
char student_ID[20];
char name[20];
int age[20];
int reply_number[20];
char topic[20];
}discussion_record[20];

void main()
{ char print_character=0;
printf("a=Printing All Discussion Records\nb=Retrieval of Discussion Record\nc=Sorting and Saving Discussion Records\nd=Maintenance od Discussion Records\ne=Statistic of Student's Discussion\nf=Exit\n");
scanf("%c\n",&print_character);
FILE *fp;
fp=fopen("/rhome5/en/09822583d/discussion_record.txt","rb");
int i;
for(i=0;i<20;i++);
fscanf(fp,"%d %s %s %d %d\n",&discussion_record[i].record_ID,&discussion_record[i].student_ID,&discussion_record[i].name,&discussion_record[i].age,&discussion_record[i].reply_number);
switch(print_character)
{
case 'a':
{
int j;
for(j=1;j<=20;j++)
{
printf("%2s %4s %5s %2s %s\n",discussion_record[j].record_ID,discussion_record[j].student_ID,discussion_record[j].name,discussion_record[j].age,discussion_record[j].reply_number);
}
break;
}

case 'b':
{
{ int a;
scanf("%d",&a);
a=a-1;
printf("%2s %4s %5s %2s %s\n",discussion_record[a].record_ID,discussion_record[a].student_ID,discussion_record[a].name,discussion_record[a].age,discussion_record[a].reply_number);
}
break;
}

case 'c':
{
{
int d;
scanf("%d\n",&d);
d=d-1;
printf("%s\n",discussion_record[d].reply_number);
scanf("%s\n",discussion_record[d].reply_number);
printf("the reply number has been changed into %d\n",discussion_record[d].reply_number);

fclose(fp);
break;
}
}

case 'd':
{

{

{
int temp;
for (i=0;i<20;i++)

if (discussion_record[i].reply_number<=discussion_record[i+1].reply_number)
{
temp=discussion_record[i].reply_number;
discussion_record[i].reply_number=discussion_record[i+1].reply_number;
discussion_record[i+1].reply_number=temp;
}
}
for(i=0;i<20;i++)
printf("%2s %4s %5s %2s %s\n",discussion_record[i].record_ID,discussion_record[i].student_ID,discussion_record[i].name,discussion_record[i].age,discussion_record[i].reply_number);
}

break;
}
case 'e':
{
void statistic()
{
int e,f;
int g[20]={0};
int h[20]={0};
printf("\n[Statistic]\n");
for(e=0;e<20;e++)
{
if(g[e]==0)
{
for(f=e;f<20;f++)
{

if(strcmp(discussion_record[e].student_ID,discussion_record[f].student_ID)==0)
{
g[e]++;
h[f]=1;
}
}

printf("%s %d\n",discussion_record[e].name,g[e]);
}
}
}
}

case 'f':
{
break;
}
}
discussion.c: In function `main':
discussion.c:71: warning: assignment makes integer from pointer without a cast
discussion.c:72: error: incompatible types in assignment
discussion.c:73: error: incompatible types in assignment
discussion.c:114: error: parse error at end of input
冒泡排序那里出错 新手不太懂
学校非要用unix 非要用GCC编译 才刚接触C一个多月 就要求这种作业 很多都是问同学 找同学发来的
最新回答
三分醒七分醉

2024-10-15 01:35:42

#include <stdio.h>
#include <string.h>

struct discussion_record
{
int record_ID;
char student_ID[20];
char name[20];
int age;
int reply_number;
char topic[20];
}discussion_record[20];

void statistic()
{
int e,f;
int g[20]={0};
int h[20]={0};

printf("\n[Statistic]\n");

for(e=0;e<20;e++)
{
if(g[e]==0)
{
for(f=e;f<20;f++)
{
if(strcmp(discussion_record [e].student_ID,discussion_record[f].student_ID)==0)
{
g[e]++;
h[f]=1;
}
}

printf("%s %d\n",discussion_record[e].name,g [e]);
}
}
}

void main()
{
char print_character=0;
int i = 0;

printf("a=Printing All Discussion Records\nb=Retrieval of Discussion Record\nc=Sorting and Saving Discussion Records\nd=Maintenance od Discussion Records\ne=Statistic of Student's Discussion\nf=Exit\n");
scanf("%c\n",&print_character);

FILE *fp;
fp=fopen("/rhome5/en/09822583d/discussion_record.txt","rb");

for(i=0; i<20; i++)
{
fscanf(fp,"%d %s %s %d %d\n",&(discussion_record [i].record_ID),
(char*)&(discussion_record[i].student_ID),(char*)&(discussion_record [i].name),
&discussion_record[i].age,&discussion_record [i].reply_number);
}

switch(print_character)
{
case 'a':
{
int j = 0;
for(j=1;j<=20;j++)
{
printf("%d %4s %5s %d %d\n",discussion_record[j].record_ID,
(char*)(discussion_record[j].student_ID),(char*)(discussion_record[j].name),
discussion_record[j].age,discussion_record[j].reply_number);
}
break;
}
case 'b':
{
int a;
scanf("%d",&a);
a=a-1;
printf("%d %4s %5s %d %d\n",discussion_record[a].record_ID,
(char*)(discussion_record [a]).student_ID,(char*)(discussion_record[a].name),
discussion_record [a].age,discussion_record[a].reply_number);
break;
}
case 'c':
{
int d;
scanf("%d\n",&d);
d=d-1;
printf("%d\n",discussion_record [d].reply_number);
scanf("%d\n",&(discussion_record [d].reply_number));
printf("the reply number has been changed into %d\n",discussion_record[d].reply_number);

fclose(fp);
break;
}
case 'd':
{
int temp;
for (i=0;i<20;i++)
{
if (discussion_record [i].reply_number<=discussion_record[i+1].reply_number)
{
temp=discussion_record[i].reply_number;
discussion_record[i].reply_number=discussion_record[i+1].reply_number;
discussion_record[i+1].reply_number=temp;
}
}
for(i=0;i<20;i++)
printf("%d %4s %5s %d %d\n",discussion_record[i].record_ID,
(char*)(discussion_record [i].student_ID),(char*)(discussion_record[i].name),
discussion_record [i].age,discussion_record[i].reply_number);

break;
}
case 'e':
statistic();
default:
break;
}
}

一复制格式都乱掉了, 这个在GCC下编译通过了(注意, 只是编译通过, 至于逻辑对不对不知道)
还有, 一个地方应该是写错了,感觉原意应该不是那样, main()函数中的第一个for()循环后多了一个分号,那样就成了个空的循环了...
弃殇

2024-10-15 01:38:39

discussion.c:72: error: incompatible types in assignment
discussion.c:73: error: incompatible types in assignment
这两行由于结构体定义中有错, 改成下面的就对了:
struct discussion_record
{
int record_ID;
char student_ID[20];
char name[20];
int age;
int reply_number;
char topic[20];
}discussion_record[20];

discussion.c:114: error: parse error at end of input
一般是由于少了或者多了一个大括号,请仔细检查大括号是否配对。
另外楼主的程序格式看上去有些乱,所以检查起来比较费劲, 建议合理采用代码块缩进来提高可读性
三生路

2024-10-15 02:01:37

int reply_number[20];
改成:
int reply_number;
------------
FILE *fp;
int i;
放到语句之前:
void main()
{ char print_character=0;
FILE *fp;
int i;
------------
int temp; 声明要能提到前面,最好不要夹在半当中。
-----------------
括号配对,自己查一下。
逆风の蒲公英

2024-10-15 06:51:10

我也压力很大。。。
奶茶

2024-10-15 06:37:27

orz...你新手就写出了这么多啊...
我感到了巨大的压力...