PROBLEMA [Linguaggio C] Non riesco a capire come passare ad una funzione un vettore di strutture

RedGrizzly01

Nuovo Utente
17
1
Codice:
#include<stdio.h>
#include<stdlib.h>
#define N 10

typedef struct
{
int pettorine;
float tempo;
}atleti;



void shifts (atleti x[],atleti temp,float numero2);



int main()
{
    atleti v [N],temp;
    int i,k,j,count=0,stato,pettorina;
    const int mid=(N/2)-1;
    float tempi;
    char scelta;
  
  
  
    for(i = 0 ; i <10; i++)
     {
         do
         {
         printf("\ninserisci il tempo:");
         scanf("%f",&v[i].tempo);
        printf("\ninserisci il numero di pettorina:");
         scanf("%d",&v[i].pettorine);     
        }while(v[i].tempo<=0);
      
     }
       system("cls");

  
     do
     {
  
         do
         {
             stato==;
         printf("\n inserisci un nuovo tempo:");
         scanf("%f",&tempi);
         printf("\n insersci un numero di pettorina");
         scanf("%d",&pettorina);
        }while(tempi<=0||pettorina<=0);
         printf("\nse vuoi inserire un nuovo tempo premi Y:");
         printf("\nse vuoi uscire dal programma premi N");
         printf("\nscelta:");
         scanf("%s",&scelta);
         shifts (temp,tempi);
     }while(scelta=='Y'||scelta=='y');

     printf("----top ten corridori:----");
     for(i = 0;i < N ; i++)
     {
         printf("\nposizione:%d atleta  tempo:%8.2f",++count,&v[i].tempo);
     }
  
     printf("\n\npremi un tasto per continuare....");
}

  

  
  
void shifts( atleti x[], atleti temp, float numero2)
{
int i,k,stato=0;
if(numero2<x[0].tempo)
{
    for( i=9;i>0;i--)
    {
    x[i]=x[i-1];
    }
    x[0].tempo=numero2;
}
for( i=9;i>0 &&stato==0;i--)
{
      if(numero2<x[i].tempo&&numero2>x[i-1].tempo)
      {
         printf("here");
           stato==1;
        for( k=9;k>i;k--)
        {
           x[k]=x[k-1];
        temp=x[k-1];
        x[k]=temp;
        }
        x[i].tempo=numero2;
        stato=1;
      }
  } 
  return;
}

L'errore riportato è il seguente: 56 22 C:\Users\iolor\Documents\Quella buona.cpp [Error] cannot convert 'atleti' to 'atleti*' for argument '1' to 'void shifts(atleti*, atleti, float)'
L'ide utilizzato e devc++,versione compilatore: TDM-GCC 4.9.2.]


Grazie per il vostro aiuto.


 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,220
1,852
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Ti sta dicendo che non può convertire "atleti" in "atleti*". Infatti tu hai come primo parametro della funzione un array, ma cerchi di passare "temp" che non è un array.
Inoltre la funzione shifts non è utilizzata correttamente. Il secondo parametro è inutile, non serve a nulla. Puoi dichiarare un tipo "atleta" nella funzione stessa.
Ci sono anche errori dovuti ad assegnamenti (relativi alla variabile stato). Non è nemmeno corretto il funzionamento di shifts.
 
  • Mi piace
Reazioni: RedGrizzly01

RedGrizzly01

Nuovo Utente
17
1
ripropongo il codice scritto meglio:

Codice:
#include<stdio.h>
#include<stdlib.h>
#define N 10

typedef struct
{
int pettorine;
float tempo;
}atleti;



void shifts (atleti x[],atleti temp,float numero2);



int main()
{
    atleti v [N],temp;
    int i,k,j,count=0,stato,pettorina;
    const int mid=(N/2)-1;
    float tempi;
    char scelta;
    
    
    
    for(i = 0 ; i <10; i++)
     {
         do
         {
         printf("\ninserisci il tempo:");
         scanf("%f",&v[i].tempo);
        printf("\ninserisci il numero di pettorina:");
         scanf("%d",&v[i].pettorine);       
        }while(v[i].tempo<=0);
        
     }
       system("cls");

    
     do
     {
    
         do
         {
         printf("\n inserisci un nuovo tempo:");
         scanf("%f",&tempi);
         printf("\n insersci un numero di pettorina");
         scanf("%d",&pettorina);
        }while(tempi<=0||pettorina<=0);
         printf("\nse vuoi inserire un nuovo tempo premi Y:");
         printf("\nse vuoi uscire dal programma premi N");
         printf("\nscelta:");
         scanf("%s",&scelta);
         shifts (v[],temp,tempi); //come primo parametro gli ho passato il vettore v[]
     }while(scelta=='Y'||scelta=='y');

     printf("----top ten corridori:----");
     for(i = 0;i < N ; i++)
     {
         printf("\nposizione:%d atleta  tempo:%8.2f",++count,&v[i].tempo);
     }
    
     printf("\n\npremi un tasto per continuare....");
}

    

    
    
void shifts( atleti x[], atleti temp, float numero2)
{
int i,k,stato=0;
if(numero2<x[0].tempo)
 {
    for( i=9;i>0;i--)
    {
    x[i]=x[i-1];
    }
    x[0].tempo=numero2;
}
 for( i=9;i>0 &&stato==0;i--)
 {
      if(numero2<x[i].tempo&&numero2>x[i-1].tempo)
      {
        for( k=9;k>i;k--)
        {
           x[k]=x[k-1];
        temp=x[k-1];
        x[k]=temp;
        }
        x[i].tempo=numero2;
        stato=1;
      }
  }   
  return;
}

l'unica cosa che non riesco a capire è come passargli il vettore v[], da sempre lo stesso errore.
 

pabloski

Utente Èlite
2,868
916
Ho messo dei print in testa alla funzione shifts e il vettore viene visualizzato correttamente. Evidentemente e' quello che c'e' dopo che non va.
 

pabloski

Utente Èlite
2,868
916
----top ten corridori:----
posizione:1 atleta tempo: 0.00
posizione:2 atleta tempo: 0.00
posizione:3 atleta tempo: 0.00
posizione:4 atleta tempo: 0.00
posizione:5 atleta tempo: 0.00
posizione:6 atleta tempo: 0.00
posizione:7 atleta tempo: 0.00
posizione:8 atleta tempo: 0.00
posizione:9 atleta tempo: 0.00
posizione:10 atleta tempo: 0.00

ma all'inizio di shifts ho fatto stampare il vettore v e i numeri sono quelli...ho messo N,N per N=1..10 come valori di v e 100,100 per i valori "nuovi"
 
  • Mi piace
Reazioni: RedGrizzly01

RedGrizzly01

Nuovo Utente
17
1
----top ten corridori:----
posizione:1 atleta tempo: 0.00
posizione:2 atleta tempo: 0.00
posizione:3 atleta tempo: 0.00
posizione:4 atleta tempo: 0.00
posizione:5 atleta tempo: 0.00
posizione:6 atleta tempo: 0.00
posizione:7 atleta tempo: 0.00
posizione:8 atleta tempo: 0.00
posizione:9 atleta tempo: 0.00
posizione:10 atleta tempo: 0.00

ma all'inizio di shifts ho fatto stampare il vettore v e i numeri sono quelli...ho messo N,N per N=1..10 come valori di v e 100,100 per i valori "nuovi"



Penso sia quindi un problema della funzione , ma non capisco dove.
Post unito automaticamente:

----top ten corridori:----
posizione:1 atleta tempo: 0.00
posizione:2 atleta tempo: 0.00
posizione:3 atleta tempo: 0.00
posizione:4 atleta tempo: 0.00
posizione:5 atleta tempo: 0.00
posizione:6 atleta tempo: 0.00
posizione:7 atleta tempo: 0.00
posizione:8 atleta tempo: 0.00
posizione:9 atleta tempo: 0.00
posizione:10 atleta tempo: 0.00


ma all'inizio di shifts ho fatto stampare il vettore v e i numeri sono quelli...ho messo N,N per N=1..10 come valori di v e 100,100 per i valori "nuovi"



Dopo ore passate a cercare l'errore credo di aver risolto ! praticamente al posto di utilizzare l'operatore d conversione %f per stampare i tempi usare l'operatore di conversione %d il quale mi restituiva sempre 0.

grazie per il tuo tempo , ti meriti comunque un pollice in su!
 
Ultima modifica:

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili