提问人:carlostevez 提问时间:11/5/2022 更新时间:11/5/2022 访问量:27
指导结构问题,你能帮我吗?
directing problem with struct , can you help me?
问:
我是一个初学者程序员,我必须解决这个作业,但我有一个问题。 当我使用这个程序时,系统写出了这个问题:
Syntax Error(s)
__tester__.c: In function ‘main’:
__tester__.c:64:7: error: incompatible types when assigning to type ‘struct jatekok’ from type ‘float’
csere = tarsas[i].ertekeles;
^
__tester__.c:66:20: error: incompatible types when assigning to type ‘float’ from type ‘struct jatekok’
tarsas[j].ertekeles=csere;
程序:
#include <stdio.h>
struct jatekok{
char nev[50];
int ev;
float ertekeles;
int min;
int max;
}csere;
int main()
{
struct jatekok tarsas[8];
for(int i=0; i<8; i++)
{
scanf("%s %d %f %d %d", tarsas[i].nev, &tarsas[i].ev, &tarsas[i].ertekeles, &tarsas[i].min, &tarsas[i].max);
}
printf("A beolvasott adatok:\n");
for(int i=0; i<8; i++)
{
printf("%s (%d): ertekeles: %.1f, jatekosok szama: %d-%d\n", tarsas[i].nev, tarsas[i].ev, tarsas[i].ertekeles, tarsas[i].min, tarsas[i].max);
}
printf("\n");
printf("Az 5 fovel jatszhato jatekok:\n");
for(int i=0; i<8; i++)
{
if(tarsas[i].max>=5)
{
printf("%s\n", tarsas[i].nev);
}
}
int regi=2040;
int index =0;
for(int i=0; i<8; i++)
{
if(tarsas[i].ev<regi)
{
regi=tarsas[i].ev;
index=i;
}
}
printf("\n");
printf("A legregebbi jatek: ");
printf("%s\n", tarsas[index].nev);
printf("\n");
printf("A rendezett jateklista:\n");
struct jatekok csere;
for(int i=0;i<7;i++)
for(int j=i+1;j<8;j++)
if(tarsas[i].ertekeles<tarsas[j].ertekeles)
{
csere = tarsas[i].ertekeles;
tarsas[i].ertekeles=tarsas[j].ertekeles;
tarsas[j].ertekeles=csere;
}
for(int i=0; i<8; i++)
{
printf("%s (%d): ertekeles: %.1f, jatekosok szama: %d-%d\n", tarsas[i].nev, tarsas[i].ev, tarsas[i].ertekeles, tarsas[i].min, tarsas[i].max);
}
return 0;
}
但是如果我使用它,程序是正确的,我不明白它们之间有什么区别。你可以帮我吗?这些程序是用 c 编写的。
#include <stdio.h>
struct jatek{
char nev[50];
int ev;
float ertekeles;
int minjatekos;
int maxjatekos;
};
int main(){
struct jatek Jatekok[8];
printf("A beolvasott adatok:\n");
for (int i=0;i<8;i++){
scanf("%s %d %f %d %d",Jatekok[i].nev,&Jatekok[i].ev,&Jatekok[i].ertekeles, &Jatekok[i].minjatekos, &Jatekok[i].maxjatekos);
printf("%s (%d): ertekeles: %.1f, jatekosok szama: %d-%d\n",Jatekok[i].nev,Jatekok[i].ev,Jatekok[i].ertekeles, Jatekok[i].minjatekos, Jatekok[i].maxjatekos);};
printf("\nAz 5 fovel jatszhato jatekok:\n");
for (int i=0;i<8;i++)
if (Jatekok[i].maxjatekos>=5 && Jatekok[i].minjatekos <=5)
printf("%s\n",Jatekok[i].nev);
int minev = Jatekok[0].ev;
for (int i=0;i<8;i++)
if (Jatekok[i].ev<= minev)
minev = Jatekok[i].ev;
for (int i=0;i<8;i++)
if (Jatekok[i].ev == minev){
printf("\nA legregebbi jatek: %s\n\nA rendezett jateklista:\n",Jatekok[i].nev);
break;};
struct jatek temp;
for (int i=0;i<7;i++)
for (int j=i+1;j<8;j++)
if (Jatekok[i].ertekeles < Jatekok[j].ertekeles){
temp = Jatekok[i];
Jatekok[i] = Jatekok[j];
Jatekok[j] = temp;};
for (int i=0;i<8;i++)
printf("%s (%d): ertekeles: %.1f, jatekosok szama: %d-%d\n",Jatekok[i].nev,Jatekok[i].ev,Jatekok[i].ertekeles, Jatekok[i].minjatekos, Jatekok[i].maxjatekos);
}
答:
0赞
embeddedstack
11/5/2022
#1
让我们考虑一下编译器是怎么说的;
你右手拿着一个苹果,左手拿着一个披萨。这两件事是一样的吗?不,不是。但你表现得好像这些是相同的。
csere = tarsas[i].ertekeles;
tarsas[i].ertekeles=tarsas[j].ertekeles;
tarsas[j].ertekeles=csere;
csere
是结构类型,但您分配了浮点变量。不,披萨和苹果并不相同。然后你试图互相分配不同的类型,比如tarsas[j].ertekeles=csere
正确版本
csere = tarsas[i];
tarsas[i].ertekeles=tarsas[j].ertekeles;
tarsas[j] = csere;
如果我们看对方代码的同一部分
temp = Jatekok[i];
Jatekok[i] = Jatekok[j];
Jatekok[j] = temp;
temp
是一个结构体,Jatekok[i] 是另一个结构体。
评论
0赞
carlostevez
11/5/2022
现在,我尝试了温度,但它不起作用
0赞
carlostevez
11/5/2022
#include < stdio.h> struct jatekok{ char nev[50]; int ev; float ertekeles; int min; int max; };int main() { struct jatekok temp; for(int i=0;一<7;i++) { for(int j=i+1;J<8;j++) { if(tarsas[i].ertekeles<tarsas[j].ertekeles) { temp = tarsas[i].ertekeles; tarsas[i].ertekeles=tarsas[j].ertekeles; tarsas[j].ertekeles=temp; } } }for(int i=0; i<8; i++) { printf(“%s (%d): ertekeles: %.1f, jatekosok szama: %d-%d\n”, tarsas[i].nev, tarsas[i].ev, tarsas[i].ertekeles, tarsas[i].min, tarsas[i].max); } return 0;}
0赞
carlostevez
11/5/2022
对不起,如果这是一件容易的事情,但不明白
0赞
carlostevez
11/5/2022
问题仍然是一样的。现在它这样写: 语法错误 tester.c:在函数“main”中:tester.c:66:6:错误:从类型“float”分配给类型“struct jatekok”时类型不兼容 temp = tarsas[i].ertekeles; ^ tester.c:68:20:错误:从类型“struct jatekok”tarsas[j].ertekeles=temp分配给类型“float”时,类型不兼容;
0赞
embeddedstack
11/5/2022
我刚刚编辑了我的答案并添加了正确的赋值语法。
评论