Torna indietro   Hardware Upgrade Forum > Software > Programmazione

WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
Un mondo affollato e vivo, personaggi destinati a sparire a fine test e nessuno a inseguire l'oggetto giusto. Beta e stress test di World of Warcraft: Forever hanno fatto emergere un roleplay spontaneo, tra danze a Goldshire e code ordinate ai PNG
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
In tre giorni a Las Vegas Oracle ha presentato agenti che eseguono il lavoro, l'alleanza con OpenAI e un cloud aperto agli acceleratori di tutti. Ma i clienti europei chiedono garanzie prima ancora delle funzionalità
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
Fino a 740 km WLTP con la batteria da 97,2 kWh, sospensioni che leggono la strada con una telecamera e un abitacolo da salotto parigino. La nuova DS N°7 raccoglie l'eredità della DS 7 e la porta, per la prima volta, nel mondo 100% elettrico. Ecco come è fatta, cosa offre e quanto costa.
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


WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà WoW Forever: la beta è stato uno dei mome...
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA Oracle AI World 2026: in Europa prima la sovrani...
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più Recensione Samsung Galaxy Tab S12 Ultra: non chi...
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura) Hyundai IONIQ 5 N, l'elettrica che finge di esse...
Musk non riesce a fermare la causa: le t...
Grafene al posto del silicio per le cell...
F-Stop, il prequel cancellato di Portal ...
Il razzo spaziale New Glenn di Blue Orig...
La Cina si prepara al primo lancio orbit...
Sale LAN, la Manovra 2027 introduce una ...
11 prezzi imperdibili in Amazon: non sol...
Giù i prezzi di Xiaomi 17T e Xiao...
Una tassa di 5,5 centesimi su ogni gigab...
Vuoi clonare un videogioco con l'IA? Cla...
Furto da 6,3 miliardi di dollari, Binanc...
Gli USA dipendono dai robot stranieri: T...
Volkswagen non ha più soldi per l...
Telescopio spaziale Hubble: la NASA cerc...
Più sottile e potente: le nuove i...
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: 06:18.


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