Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Grazie ad un mocio rotante che viene costantemente bagnato e pulito, Narwal Flow assicura un completo e capillare lavaggio dei pavimenti di casa. La logica di intellignza artificiale integrata guida nella pulizia tra i diversi locali, sfruttando un motore di aspirazione molto potente e un sistema basculante per la spazzola molto efficace sui tappeti di casa
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi
Con un prezzo di 2.999 euro, il Panasonic Z95BEG entra nella fascia ultra-premium dei TV OLED: pannello Primary RGB Tandem, sistema di raffreddamento ThermalFlow, audio Technics integrato e funzioni gaming avanzate lo pongono come un punto di riferimento
HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione
HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione
Abbiamo provato per diverse settimane il nuovo Magic V5 di HONOR, uno smartphone pieghevole che ci ha davvero stupito. Il device è il più sottile (solo 4.1mm) ma non gli manca praticamente nulla. Potenza garantita dallo Snapdragon 8 Elite, fotocamere di ottima qualità e batteria in silicio-carbonio che garantisce un'ottima autonomia. E il Prezzo? Vi diciamo tutto nella nostra recensione completa.
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


Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio Narwal Flow: con il mocio orizzontale lava i pav...
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi Panasonic 55Z95BEG cala gli assi: pannello Tande...
HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione HONOR Magic V5: il pieghevole ultra sottile e co...
Recensione Google Pixel 10 Pro XL: uno zoom 100x assurdo sempre in tasca (e molto altro) Recensione Google Pixel 10 Pro XL: uno zoom 100x...
Lenovo IdeaPad Slim 3: un notebook Snapdragon X economico Lenovo IdeaPad Slim 3: un notebook Snapdragon X ...
GeForce NOW, tra pochi giorni arriva l'a...
Gli USA e la NASA non vogliono perdere l...
Il nuovo iPhone 17 Air ha già un clone A...
Una capsula SpaceX Dragon ha acceso i mo...
3 nuovissime offerte sottocosto pi&ugrav...
Robot aspirapolvere Roborock Q7 M5 a pre...
Offerte sui TV LG su Amazon: OLED evo e ...
Il Galaxy Z Fold 7 è un successo:...
Amazon abbatte i prezzi hardware: come p...
Eureka J15 Ultra imbarazza la concorrenz...
ChatGPT: il piano Free diventa più...
Il prossimo top di gamma di Vivo sarà il...
Sony mostra in anteprima la propria tecn...
Dreame A3 AWD: a IFA 2025 debutta il rob...
OpenAI, il chip proprietario per l'AI &e...
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: 04:55.


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