Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Le soluzioni FSP per il 2026: potenza e IA al centro
Le soluzioni FSP per il 2026: potenza e IA al centro
In occasione del Tech Tour 2025 della European Hardware Association abbiamo incontrato a Taiwan FSP, azienda impegnata nella produzione di alimentatori, chassis e soluzioni di raffreddamento tanto per clienti OEM come a proprio marchio. Potenze sempre più elevate negli alimentatori per far fronte alle necessità delle elaborazioni di intelligenza artificiale.
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS è il principale operatore di servizi cloud al mondo e da tempo parla delle misure che mette in atto per garantire una maggiore sovranità alle organizzazioni europee. L'azienda ha ora lanciato AWS European Sovereign Cloud, una soluzione specificamente progettata per essere separata e distinta dal cloud "normale" e offrire maggiori tutele e garanzie di sovranità
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Xiaomi ha portato sul mercato internazionale la nuova serie Redmi Note, che rappresenta spesso una delle migliori scelte per chi non vuole spendere molto. Il modello 15 Pro+ punta tutto su una batteria capiente e su un ampio display luminoso, sacrificando qualcosa in termini di potenza bruta e velocità di ricarica
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-04-2013, 11:59   #1
Peppe 93
Junior Member
 
Iscritto dal: Apr 2013
Messaggi: 27
[C] richiamo di struttura in una funzione

allora io ho uno struct che ho precedentemente riempito in una funzione esterna al main e lo voglio richiamare in un'altra funzione esterna per effettuare operazioni
Codice:
struct nome{
char nome[50];
char cognome[50];
int eta;
}t_nome;
vorrei sapere come devo richiamare lo struct riempito nella funzione secondaria
Peppe 93 è offline   Rispondi citando il messaggio o parte di esso
Old 13-04-2013, 12:10   #2
The_ouroboros
Senior Member
 
L'Avatar di The_ouroboros
 
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
passaggio per parametro
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go
The_ouroboros è offline   Rispondi citando il messaggio o parte di esso
Old 13-04-2013, 12:27   #3
Peppe 93
Junior Member
 
Iscritto dal: Apr 2013
Messaggi: 27
sintatticamente come dovrebbe essere??
Codice:
funzione (struct nome t_nome)

main(){
...
funzione(struct nome t_nome)
...
}
così?
o devo richiamare la funzione con cui l'ho riempito?

Ultima modifica di Peppe 93 : 13-04-2013 alle 12:45. Motivo: kji
Peppe 93 è offline   Rispondi citando il messaggio o parte di esso
Old 13-04-2013, 13:50   #4
lorenzo001
Senior Member
 
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
funzione (struct nome *t_nome)

e

funzione(&t_nome)
lorenzo001 è offline   Rispondi citando il messaggio o parte di esso
Old 13-04-2013, 14:13   #5
Peppe 93
Junior Member
 
Iscritto dal: Apr 2013
Messaggi: 27
Quote:
Originariamente inviato da lorenzo001 Guarda i messaggi
funzione (struct nome *t_nome)

e

funzione(&t_nome)
anche se lo struct l'ho riempito con un'altra funzione?
Peppe 93 è offline   Rispondi citando il messaggio o parte di esso
Old 13-04-2013, 14:16   #6
The_ouroboros
Senior Member
 
L'Avatar di The_ouroboros
 
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
Quote:
Originariamente inviato da Antonio23 Guarda i messaggi
per valore, riferimento o puntatore... ma "per parametro"?
volevo dire come parametro della funzione
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go
The_ouroboros è offline   Rispondi citando il messaggio o parte di esso
Old 13-04-2013, 14:24   #7
Peppe 93
Junior Member
 
Iscritto dal: Apr 2013
Messaggi: 27
allora ho riempito lo struct con una funzione esterna al main, sempre con una funzione esterna al main voglio lavorare con quei dati, per esempio stamparli, il problema è che mi stampa caratteri spaciali, questo (a mio parere) perchè non chiamo correttamente lo struct nella funzione, dovendolo allocare come dovrei fare?? e per poi richiamarlo (contenente i dati)?
Peppe 93 è offline   Rispondi citando il messaggio o parte di esso
Old 13-04-2013, 16:42   #8
Peppe 93
Junior Member
 
Iscritto dal: Apr 2013
Messaggi: 27
quindi se il mio struct si chiama invitato dovrebbe essere così:
Codice:
struct invitato{
...
};
main(){
struct invitato t_inv[n];
....
funzione(&t_inv);
}
funzione(struct invitato *t_inv){
....
}
sbaglio??
se non sbaglio con la dichiarazione "struct invitato t_inv[n]" dichiaro un puntatore allo struct no??
Peppe 93 è offline   Rispondi citando il messaggio o parte di esso
Old 13-04-2013, 17:06   #9
Peppe 93
Junior Member
 
Iscritto dal: Apr 2013
Messaggi: 27
il mio codice è strutturato in modo che l'utente decide il numero di invitati e la funzione che riempie lo struct lo fa con cicli, nella seconda funzione invece deve solo stampare i nomi e chiedere un coefficiente...come mi consigli di comportarmi?
nonostante le modifiche il programma continua a stampare caratteri speciali..

p.s. le funzioni lavorano perfettamente perchè prima il codice era tutto dentro il main ma per semplicità ho preferito dividerle e spostarle

Ultima modifica di Peppe 93 : 13-04-2013 alle 18:09.
Peppe 93 è offline   Rispondi citando il messaggio o parte di esso
Old 13-04-2013, 18:58   #10
Peppe 93
Junior Member
 
Iscritto dal: Apr 2013
Messaggi: 27
Codice:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <string.h>

struct invitato
{
char cognome[25];
char nome[25];
int eta;
char sesso;
char tipo_invitato[10];
};

int i, m, n, j,k;
    
int dati_inv(struct invitato *t_inv){
printf("inserisci numero invitati\n");
scanf("%i", &n);
      
printf("inserisci dati invitato\n");
char null;
                          
for (i=0; i<n; i++){
printf("inserisci cognome invitato n.%i\t\t\t\t\tp\n ",i+1);
scanf("%s", &t_inv[i].cognome);

printf("inserisci nome invitato n.%i\t\t\t\t\te\n ",i+1);
scanf("%s", &t_inv[i].nome);

printf("inserisci eta' invitato n.%i\t\t\t\t\tp\n ",i+1);
scanf("%i", &t_inv[i].eta);
scanf("%c", &null);

printf("inserisci sesso invitato n.%i (m/f)\t\t\t\tp\n",i+1);
scanf("%c", &t_inv[i].sesso);

printf("inserisci tipo di invito (amico/parente) invitato n.%i\t\te\n",i+1);
scanf("%s", &t_inv[i].tipo_invitato);
}

printf("questo e' l'elenco degli invitati\n");
printf("Numero|Cognome|Nome|Eta'|Sesso|Tipo Invitato\n");
        
for (i=0; i<n; i++){
printf("n.%i |%s|%s|%i|%c|%s\n",i+1, t_inv[i].cognome, t_inv[i].nome, t_inv[i].eta, t_inv[i].sesso, t_inv[i].tipo_invitato);
}
}

int simpatia( struct invitato *t_inv){
printf(" bene adesso passiamo alla simpatia, inserire per ogni persona un valore\n" 
"  (anche decimale) compreso tra -1 e +1, in cui -1 rappresenta antipatia,\n" 
" 0 se non si conosce il soggetto e +1 se si prova simpatia per il soggetto.\n");
                    
                    
float simpatia[n][n];
                    
for (i=0; i<n; i++){
for (j=0; j<n; j++){
if (*t_inv[i].cognome==*t_inv[j].cognome)
{
simpatia[i][j]=5;
}
printf("invitato %c %c esprimi simpatia per %c %c\n", *t_inv[i].cognome, *t_inv[i].nome, *t_inv[j].cognome, *t_inv[j].nome);
scanf("%f", &simpatia[i][j]);
}
}

for (i=0; i<n; i++){
for (j=0; j<n; j++){
if (simpatia[i][j]<=1 && simpatia[i][j]>=-1)
printf ("il coefficiente di %s %s verso %s %s e' %.2f\n",t_inv[i].cognome, t_inv[i].nome, t_inv[j].cognome, t_inv[j].nome, simpatia[i][j]);
}
}
}
int main(){
int primo;
int primo2;
struct invitato t_inv[n];
dati_inv(&(t_inv[i]));
                             
printf("desideri inserire i dati sulla simpatia?\n0->si;\n1->no\n");
scanf("%i", &primo2);
                             
if (primo2==0)
simpatia(&(t_inv[i]));
else
printf("programma terminato\n");
system("PAUSE");
return 0;
}
questo è il codice

Ultima modifica di Peppe 93 : 13-04-2013 alle 19:39.
Peppe 93 è offline   Rispondi citando il messaggio o parte di esso
Old 13-04-2013, 19:06   #11
Peppe 93
Junior Member
 
Iscritto dal: Apr 2013
Messaggi: 27
veramente era identato ma l'ho dovuta togliere perchè andava troppo oltre nei tag del codice
Peppe 93 è offline   Rispondi citando il messaggio o parte di esso
Old 13-04-2013, 19:33   #12
Peppe 93
Junior Member
 
Iscritto dal: Apr 2013
Messaggi: 27
Quote:
Originariamente inviato da Antonio23 Guarda i messaggi
mi sembra strano...
in orizzontale intendo si doveva scorrere troppo per leggere il codice...comunque quando erano dentro il main funzionavano perfettamente

Quote:
Originariamente inviato da Antonio23 Guarda i messaggi
un'altra cosa. tu leggi n dentro una funzione. ora non mi ricordo il C99 cosa garantisce, ma credo che il valore di n, se nel main dichiari un array di n struct invitato, debba essere noto al momento della chiamata (ma non sono sicuro al 100% di questo).
ovviamente si, infatti se all'inizio della funzione non chiedo all'utente di inserire n il tutto non parte, ma essendo n variabile globale ho fatto in modo che fosse chiesto al momento dell'inserimento dei dati dell'invitato
Peppe 93 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2013, 00:00   #13
Peppe 93
Junior Member
 
Iscritto dal: Apr 2013
Messaggi: 27
Quote:
Originariamente inviato da Antonio23 Guarda i messaggi
non sono molto confidente sul comportamento del programma fino a quando non vedo il main. inoltre hai rimosso quelle & dalle scanf non necessarie?
il main c'è o_O
Peppe 93 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2013, 00:38   #14
Peppe 93
Junior Member
 
Iscritto dal: Apr 2013
Messaggi: 27
n la chiede come prima domanda allìesecuzione della funzione dati_invitati...
i è usata solo nei cicli for e parte ogni volta da 0...
come li dovrei sistemare??
Peppe 93 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2013, 13:28   #15
starfred
Senior Member
 
Iscritto dal: Jul 2011
Messaggi: 381
No ma scusa un attimo, questa parte quì

Codice:
for (i=0; i<n; i++)
{
     for (j=0; j<n; j++)
     {
          if (*t_inv[i].cognome==*t_inv[j].cognome)
          {
               simpatia[i][j]=5;
          }
          printf("invitato %c %c esprimi simpatia per %c %c\n", *t_inv[i].cognome, *t_inv[i].nome, *t_inv[j].cognome, *t_inv[j].nome);
          scanf("%f", &simpatia[i][j]);
     }
}
Cos'è che dovrebbe fare? In particolar modo quell' if li mi spaventa molto...
__________________
Concluso positivamente con: Kamzata, Ducati82, Arus, TheLastRemnant, ghost driver, alexbull1, DanieleRC5, XatiX
starfred è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2013, 13:47   #16
Peppe 93
Junior Member
 
Iscritto dal: Apr 2013
Messaggi: 27
quell'if faceva parte del programma quando era in c++, mi sono dimenticato di toglierlo , naturalmente quegli "*" non ricordo perchè sono lì ma nn c'entrano nulla

tra le altre cose nel C non è consentito fare il confronto tra stringhe, si deve usare il strcmp...se io voglio fare un confronto tra 2 array di interi o float, come devo fare??
(in particolare devo confrontare i 2 array appena un elemento è uguale ad uno dell'altro array effettuare un ordine)

Ultima modifica di Peppe 93 : 14-04-2013 alle 14:24.
Peppe 93 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2013, 17:03   #17
Teardrop92
Junior Member
 
Iscritto dal: May 2012
Messaggi: 23
Per confrontare 2 vettori una cosa del genere dovrebbe andar bene

Codice:
#include <stdio.h>
#define A 4

int main()
{
int a[A];
int b[A];
int i,count;
printf("Inserisci il primo vettore:\n");
for(i=0;i<A;i++)
	{
	printf("Inserisci l'elemento %d: ",(i+1));
	scanf("%d",&a[i]);
	}
printf("Inserisci il secondo vettore:\n");
for(i=0;i<A;i++)
	{
	printf("Inserisci l'elemento %d: ",(i+1));
	scanf("%d",&b[i]);
	}
count=0;
for(i=0;i<A;i++)
	if(a[i]==b[i])
		count++;
if(count==(A))
	printf("I 2 vettori inseriti sono uguali\n");
else
	printf("I 2 vettori inseriti sono diversi\n");
return 0;
}
Teardrop92 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2013, 17:51   #18
Peppe 93
Junior Member
 
Iscritto dal: Apr 2013
Messaggi: 27
Quote:
Originariamente inviato da Teardrop92 Guarda i messaggi
Per confrontare 2 vettori una cosa del genere dovrebbe andar bene

Codice:
#include <stdio.h>
#define A 4

int main()
{
int a[A];
int b[A];
int i,count;
printf("Inserisci il primo vettore:\n");
for(i=0;i<A;i++)
	{
	printf("Inserisci l'elemento %d: ",(i+1));
	scanf("%d",&a[i]);
	}
printf("Inserisci il secondo vettore:\n");
for(i=0;i<A;i++)
	{
	printf("Inserisci l'elemento %d: ",(i+1));
	scanf("%d",&b[i]);
	}
count=0;
for(i=0;i<A;i++)
	if(a[i]==b[i])
		count++;
if(count==(A))
	printf("I 2 vettori inseriti sono uguali\n");
else
	printf("I 2 vettori inseriti sono diversi\n");
return 0;
}
sono riuscito a farlo da solo questo punto grazie
il problema adesso è che devo riprodurre questa if che in c++ funziona perfettamente in C
Codice:
if(t_inv[i].cognome==t_inv[j].cognome)
so che la funzione strcmp si può usare quando gli array sono di tipo char* quindi come li posso confrontare??
Peppe 93 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2013, 20:30   #19
Peppe 93
Junior Member
 
Iscritto dal: Apr 2013
Messaggi: 27
ho fatto già quello che mi avevi consigliatoXD ho spostato la richiesta di n dentro il main e tolto le variabili globali passando quelle necessarie nelle funzioni dal main..

p.s. nella funzione dei dati degli invitati c'è un errore per cui quando vado a scrivere i dati dell'invitato va in crash al 2 ciclo dopo aver chiesto il nome...però è strano perchè funzionava perfettamente fino a stamattina

Ultima modifica di Peppe 93 : 14-04-2013 alle 20:42.
Peppe 93 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2013, 20:56   #20
Teardrop92
Junior Member
 
Iscritto dal: May 2012
Messaggi: 23
Fammi capire...
Tu vuoi confrontare l'i-esima e la j-esima stringa( o array di caratteri insomma)?
Teardrop92 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Le soluzioni FSP per il 2026: potenza e IA al centro Le soluzioni FSP per il 2026: potenza e IA al ce...
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa AWS annuncia European Sovereign Cloud, il cloud ...
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto Redmi Note 15 Pro+ 5G: autonomia monstre e displ...
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
Un'auto su cinque è cinese: cosa ...
La cometa interstellare 3I/ATLAS e le nu...
Blue Origin presenta TeraWave, una nuova...
Compra una GeForce RTX 5080 venduta e sp...
Telescopio spaziale James Webb: osservat...
L'IA non ha portato quasi nessun benefic...
Sony LinkBuds Clip, gli auricolari open ...
La fibra è sempre più diff...
Arriva Vertiv CoolPhase PAM: raffreddame...
Chiamate cristalline e ANC evoluto a pre...
Adobe aggiorna Premiere e After Effects:...
AI Bundle, la novità dei driver A...
La roadster elettrica supportata da Xiao...
Netflix rivede l'offerta per Warner Bros...
Satya Nadella avverte: senza benefici co...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 07:28.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v