Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Peugeot Polygon Concept: ecco il futuro delle utilitarie
Peugeot Polygon Concept: ecco il futuro delle utilitarie
Polygon è la concept car di Peugeot che mostra il futuro delle soluzioni del segmento B: tra design compatti e innovativi affiancati da dimensioni compatte uno scherzo dalla manovrabilità incredibile per le manovre a bassa velocità
Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione
Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione
OPPO ha portato in Italia, dal 1° luglio 2026, Reno16 Pro: display AMOLED da 6,32 pollici a 144Hz, tripla fotocamera con sensore principale da 200 megapixel, chip Dimensity 8550 Super e batteria da 6000mAh, al prezzo di lancio di 899 euro. Lo abbiamo provato per due settimane insieme al nuovo accessorio Bubble, per capire se la formula compatta della serie regge ancora di fronte a un listino da 1099 euro
 Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco
Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco
MiniLED di fascia media con local dimming a 192 zone, 144 Hz nativi e audio firmato Devialet. La prova strumentale riscontra colori affidabili e gaming reattivo, per un prodotto molto accessibile e convincente. Ma la soundbar aggiuntiva è quasi d'obbligo
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-04-2013, 10: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, 11: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, 11: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 11:45. Motivo: kji
Peppe 93 è offline   Rispondi citando il messaggio o parte di esso
Old 13-04-2013, 12: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, 13: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, 13: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, 13: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, 15: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, 16: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 17:09.
Peppe 93 è offline   Rispondi citando il messaggio o parte di esso
Old 13-04-2013, 17: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 18:39.
Peppe 93 è offline   Rispondi citando il messaggio o parte di esso
Old 13-04-2013, 18: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, 18: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 13-04-2013, 23: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 13-04-2013, 23: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, 12: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, 12: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 13:24.
Peppe 93 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2013, 16: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, 16: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, 19: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 19:42.
Peppe 93 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2013, 19: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


Peugeot Polygon Concept: ecco il futuro delle utilitarie Peugeot Polygon Concept: ecco il futuro delle ut...
Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione Reno16 Pro: il compatto di OPPO punta su fotocam...
 Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco Hisense 55U7SE: tuttofare e accessibile, il Min...
Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto Kindle Scribe Colorsoft: riduce le cornici e div...
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint L'IA cambia tutte le regole della sicurezza tra ...
Apple potrebbe aver sospeso il progetto ...
Nintendo non seguirà l'esempio di...
Motorola ha lanciato un'app dedicata all...
Cyberpunk 2077 non si ferma e raggiunge ...
Samsung alza ancora i prezzi delle memor...
4 sconti tutti nuovi riscrivono la TOP 1...
Portatile HP con Intel Core Ultra 7 155H...
Smart TV Haier 50'' 4K crolla a 225,99€ ...
Google Pixel 10a a 399€ o 497€ (256GB) c...
Compare dal nulla e blocca lo schermo: c...
Tornano i super prezzi Nikon su Amazon, ...
Compatto, leggerissimo (1,2Kg), ma con 3...
Privacy Display per tutti i Galaxy S: Sa...
Le migliori cuffie in offerta su Amazon ...
SpaceX Starship: Ship 40 ha eseguito un ...
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: 22:08.


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