|
|||||||
|
|
|
![]() |
|
|
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 12: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 18: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 19: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
, naturalmente quegli "*" non ricordo perchè sono lì ma nn c'entrano nullatra 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. |
|
|
|
|
|
#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 20: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: 08:07.













, naturalmente quegli "*" non ricordo perchè sono lì ma nn c'entrano nulla








