|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
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; |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
|
passaggio per parametro
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go |
![]() |
![]() |
![]() |
#3 |
Junior Member
Iscritto dal: Apr 2013
Messaggi: 27
|
sintatticamente come dovrebbe essere??
Codice:
funzione (struct nome t_nome) main(){ ... funzione(struct nome t_nome) ... } o devo richiamare la funzione con cui l'ho riempito? Ultima modifica di Peppe 93 : 13-04-2013 alle 11:45. Motivo: kji |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
|
funzione (struct nome *t_nome)
e funzione(&t_nome) |
![]() |
![]() |
![]() |
#5 |
Junior Member
Iscritto dal: Apr 2013
Messaggi: 27
|
|
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
|
Quote:
![]()
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go |
|
![]() |
![]() |
![]() |
#7 |
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)?
|
![]() |
![]() |
![]() |
#8 |
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){ .... } se non sbaglio con la dichiarazione "struct invitato t_inv[n]" dichiaro un puntatore allo struct no?? |
![]() |
![]() |
![]() |
#9 |
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. |
![]() |
![]() |
![]() |
#10 |
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; } Ultima modifica di Peppe 93 : 13-04-2013 alle 18:39. |
![]() |
![]() |
![]() |
#11 |
Junior Member
Iscritto dal: Apr 2013
Messaggi: 27
|
veramente era identato ma l'ho dovuta togliere perchè andava troppo oltre nei tag del codice
|
![]() |
![]() |
![]() |
#12 |
Junior Member
Iscritto dal: Apr 2013
Messaggi: 27
|
in orizzontale intendo si doveva scorrere troppo per leggere il codice...comunque quando erano dentro il main funzionavano perfettamente
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 |
![]() |
![]() |
![]() |
#13 |
Junior Member
Iscritto dal: Apr 2013
Messaggi: 27
|
|
![]() |
![]() |
![]() |
#14 |
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?? |
![]() |
![]() |
![]() |
#15 |
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]); } } ![]()
__________________
Concluso positivamente con: Kamzata, Ducati82, Arus, TheLastRemnant, ghost driver, alexbull1, DanieleRC5, XatiX |
![]() |
![]() |
![]() |
#16 |
Junior Member
Iscritto dal: Apr 2013
Messaggi: 27
|
quell'if faceva parte del programma quando era in c++, mi sono dimenticato di toglierlo
![]() 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. |
![]() |
![]() |
![]() |
#17 |
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; } |
![]() |
![]() |
![]() |
#18 | |
Junior Member
Iscritto dal: Apr 2013
Messaggi: 27
|
Quote:
![]() 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) |
|
![]() |
![]() |
![]() |
#19 |
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. |
![]() |
![]() |
![]() |
#20 |
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)? |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:55.