Torna indietro   Hardware Upgrade Forum > Software > Programmazione

ASUS Expertbook PM3: il notebook robusto per le aziende
ASUS Expertbook PM3: il notebook robusto per le aziende
Pensato per le necessità del pubblico d'azienda, ASUS Expertbook PM3 abbina uno chassis particolrmente robusto ad un pannello da 16 pollici di diagonale che avantaggia la produttività personale. Sotto la scocca troviamo un processore AMD Ryzen AI 7 350, che grazie alla certificazione Copilot+ PC permette di sfruttare al meglio l'accelerazione degli ambiti di intelligenza artificiale
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Abbiamo provato per diversi giorni una new entry del mercato italiano, la Gowow Ori, una moto elettrica da off-road, omologata anche per la strada, che sfrutta una pendrive USB per cambiare radicalmente le sue prestazioni
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design
OnePlus 15 nasce per alzare l'asticella delle prestazioni e del gaming mobile. Ma non solo, visto che integra un display LTPO 1,5K a 165 Hz, OxygenOS 16 con funzioni AI integrate e un comparto foto con tre moduli da 50 MP al posteriore. La batteria da 7.300 mAh con SUPERVOOC 120 W e AIRVOOC 50 W è la ciliegina sulla torta per uno smartphone che promette di offrire un'esperienza d'uso senza alcun compromesso
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


ASUS Expertbook PM3: il notebook robusto per le aziende ASUS Expertbook PM3: il notebook robusto per le ...
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design   Recensione OnePlus 15: potenza da vendere e batt...
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media AMD Ryzen 5 7500X3D: la nuova CPU da gaming con ...
SONY BRAVIA 8 II e BRAVIA Theatre System 6: il cinema a casa in formato compatto SONY BRAVIA 8 II e BRAVIA Theatre System 6: il c...
iPhone Fold non è ancora pronto? ...
Nuovo smartphone in arrivo da OnePlus: t...
Amazon abbassa ancora il prezzo dei MacB...
Steam verso un 2025 da record: ricavi st...
El Capitan ancora al comando della class...
Arm nel programma NVLink Fusion: NVLink ...
Bonus Elettrodomestici 2025, si parte: c...
Jeff Bezos torna al comando, stavolta di...
Anthesi sceglie OVHcloud per digitalizza...
Cube presenta Trike Flatbed Hybrid 750, ...
Call of Duty Black Ops 7 peggio di Infin...
L'Italia è il secondo mercato per...
Wi-Fi superveloce anche in giardino? FRI...
La Ford Focus va ufficialmente in pensio...
Booking.com integra Revolut Pay: nasce 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: 08:07.


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