指导结构问题,你能帮我吗?

directing problem with struct , can you help me?

提问人:carlostevez 提问时间:11/5/2022 更新时间:11/5/2022 访问量:27

问:

我是一个初学者程序员,我必须解决这个作业,但我有一个问题。 当我使用这个程序时,系统写出了这个问题:

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);
    
}

c Windows 结构 语法错误 临时

评论


答:

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
我刚刚编辑了我的答案并添加了正确的赋值语法。