Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HONOR 400 Pro trasforma ogni scatto in capolavoro animato. Recensione
HONOR 400 Pro trasforma ogni scatto in capolavoro animato. Recensione
HONOR sorprende il mercato dei medio gamma e lo fa con il nuovo HONOR 400 Pro dal design sottile, sensore principale da 200 MP, display a 5.000 nit e AI evoluta. Lo smartphone ridefinisce la fotografia mobile in una fascia di prezzo sempre più difficile.
Intel Core Ultra 5 235 e Core Ultra 5 225F, CPU Arrow Lake per la fascia media
Intel Core Ultra 5 235 e Core Ultra 5 225F, CPU Arrow Lake per la fascia media
Intel ha introdotto le CPU Core Ultra 200S "non K" a inizio 2025. I nuovi modelli stanno arrivando sul mercato e abbiamo avuto l'opportunità di provare le soluzioni Core Ultra 5 235 e Core Ultra 5 225F, confrontandole con il Core i5-14400F di precedente generazione. Come si comportano i processori Arrow Lake per la massa? Scopriamolo insieme.
Roborock Saros Z70: un braccio meccanico per fare ordine in casa
Roborock Saros Z70: un braccio meccanico per fare ordine in casa
Dotato di tutte le ultime innovazioni in tema di aspirazione della polvere e pulizia dei pavimenti di casa, Roborock Saros Z70 integra un braccio meccanico che promette di rendere più efficiente la pulizia di casa spostando oggetti presenti sul pavimento e riordinandoli. Una idea bella e pratica, ma che all'atto pratico è pressoché inutilizzabile e dalle ricadute nulle
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 11-11-2008, 13:25   #1
Cadetto Entusiasta
Member
 
L'Avatar di Cadetto Entusiasta
 
Iscritto dal: Apr 2005
Città: Prov. di Torino
Messaggi: 164
[C] Nuovo problema con CodeBlocks

Devo scrivere un programma che inserendo due serie di 6 numeri relativi a date, riconosca quale è la più recente delle due. Solo che già facendo una mini prova preliminare di

#include <stdio.h>

main()
{

int gg1, gg2, mm1, mm2, aa1, aa2;

printf("Inserire prima data: ");
scanf("%d,%d,%d", gg1, mm1, aa1);

printf("Inserire seconda data: ");
scanf("%d,%d%d", gg2, mm2, aa2);

}

facendolo eseguire, inserisco la prima data GG MM AA, dopo che faccio invio per inserire la seconda data, mi viene fuori una finestra di windows che mi dice che il programma ha smesso di funzionare e che verrà chiuso (praticamente, mi dice anche altro ma non mi risolve la cosa). C’è qualche problema in particolare che non fa eseguire correttamente il programma?

Anche perché oggi l’ho ripreso, non ricordandomi di questa cosa, e dovrei anche vedere cosa mi fa facendolo seguire da

if(gg1>gg2 && mm1>mm2 && aa1>aa2)
printf("La prima data inserita è la più la recente\n");
else
printf("La seconda data inserita è la più recente\n");
__________________
IMPOSSIBLE IS NOTHING
Cadetto Entusiasta è offline   Rispondi citando il messaggio o parte di esso
Old 11-11-2008, 13:38   #2
royaleagle
Senior Member
 
L'Avatar di royaleagle
 
Iscritto dal: Jan 2007
Messaggi: 1237
Non è un problema di codeblocks, ma di studio .

Così funziona
Codice:
#include <stdio.h>

main()
{

int gg1, gg2, mm1, mm2, aa1, aa2;

printf("Inserire prima data: ");
scanf("%d,%d,%d", &gg1, &mm1, &aa1);
//La riga che segue serve per togliere l'invio dal buffer
while (getchar() != '\n');

printf("Inserire seconda data: ");
scanf("%d,%d,%d", &gg2, &mm2, &aa2);

}
__________________
59 trattative ok (ultimo: IntoTrouble)
royaleagle è offline   Rispondi citando il messaggio o parte di esso
Old 11-11-2008, 19:02   #3
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da royaleagle Guarda i messaggi
Non è un problema di codeblocks, ma di studio .

Così funziona
Codice:
#include <stdio.h>

main()
{

int gg1, gg2, mm1, mm2, aa1, aa2;

printf("Inserire prima data: ");
scanf("%d,%d,%d", &gg1, &mm1, &aa1);
//La riga che segue serve per togliere l'invio dal buffer
while (getchar() != '\n');

printf("Inserire seconda data: ");
scanf("%d,%d,%d", &gg2, &mm2, &aa2);

}
Magari, dal momento che a lui serve più studio, fagli imparare da subito che main() deve restituire un int, e che quindi alla fine vorrà un return con un valore numerico intero.
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 11-11-2008, 19:09   #4
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
P.S.: serve davvero quel ciclo while?
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 11-11-2008, 19:41   #5
royaleagle
Senior Member
 
L'Avatar di royaleagle
 
Iscritto dal: Jan 2007
Messaggi: 1237
-Giusta osservazione nel post precedente.
-Perchè a te funziona anche senza (while...)?
__________________
59 trattative ok (ultimo: IntoTrouble)
royaleagle è offline   Rispondi citando il messaggio o parte di esso
Old 11-11-2008, 20:43   #6
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Sì, da me funziona anche senza quel while, in effetti non mi sembra il caso in cui c'è bisogno di un controllo dello svuotamento del buffer (mi spiego: scanf() salta i whitespace, tra cui anche '\n', quindi la seconda scanf() se ne frega del newline).
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 11-11-2008, 21:00   #7
royaleagle
Senior Member
 
L'Avatar di royaleagle
 
Iscritto dal: Jan 2007
Messaggi: 1237
Io con Code::Blocks lo devo usare sempre, non so come spiegarmelo..
__________________
59 trattative ok (ultimo: IntoTrouble)
royaleagle è offline   Rispondi citando il messaggio o parte di esso
Old 11-11-2008, 21:11   #8
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Magari hai un C runtime un po' diverso: sei su Windows? Io lo sto provando da Linux e funziona senza problemi di alcun tipo, anche se mi sembrerebbe strano un comportamento differente su Windows. Magari domani o qualche altro giorno lo provo con Visual C++ e vedo se cambia qualcosa.
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 11-11-2008, 21:40   #9
royaleagle
Senior Member
 
L'Avatar di royaleagle
 
Iscritto dal: Jan 2007
Messaggi: 1237
No sono su linux, Code::Blocks 8.02, gnu gcc compiler di default.
__________________
59 trattative ok (ultimo: IntoTrouble)
royaleagle è offline   Rispondi citando il messaggio o parte di esso
Old 12-11-2008, 01:56   #10
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Anche io su Linux e con GNU gcc, compila e viene eseguito senza problemi, anche senza il while si comporta nel modo corretto.
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 12-11-2008, 11:07   #11
Cadetto Entusiasta
Member
 
L'Avatar di Cadetto Entusiasta
 
Iscritto dal: Apr 2005
Città: Prov. di Torino
Messaggi: 164
Grazie per le risposte.
Allora io adesso ho provato aggiungendo la stringa del while suggerita da royaleagle, e così devo dire che non mi fa più nessun problema di crash del programmino. Non ho ben capito che cosa intendi DanieleC88 per “…fagli imparare da subito che main() deve restituire un int, e che quindi alla fine vorrà un return con un valore numerico intero.”.
Non so, solo per renderlo noto io lavoro su ambiente Windows Vista Ultimate SP1 con CodeBlocks 8.02 e gnu gcc compiler di default (almeno, io ho scaricato il tutto e non ho cambiato niente di eccezionale, solo il carattere dei font e basta).
Comunque dato che funge il programmino e posso andare avanti con lo studio di esso, adesso il problema che ho è nel fatto di fargli analizzare i valori che gli inserisco in modo corretto. Io dopo ho inserito

if(aa1>aa2 && mm1>mm2 && gg1>gg2)
printf("Prima data inserita più recente\n");
else
printf("Seconda data inserita più recente\n");

in modo tale che analizzasse prima l’anno, poi il mese e poi il giorno e mi desse poi una risposta in base a questi parametri, ma naturalmente non fa quello che avrei in testa che mi faccia, ma con qualsiasi data che io inserisca, mi da sempre che la seconda è la più recente.
Ho provato anche ad invertire i valore che deve analizzare if, partendo dal giorno-mese-anno, ma capita la stessa cosa.
In questo caso di sicuro mi manca lo studio, ma non saprei proprio che altra alternativa ci sarebbe per svolgere questo esercizio.
__________________
IMPOSSIBLE IS NOTHING
Cadetto Entusiasta è offline   Rispondi citando il messaggio o parte di esso
Old 12-11-2008, 13:46   #12
royaleagle
Senior Member
 
L'Avatar di royaleagle
 
Iscritto dal: Jan 2007
Messaggi: 1237
1. Sai com'è la sintassi della definizione e della dichiarazione di una funzione? Sai che c'è un tipo del valore di ritorno, per il Main tale tipo è int, quindi per uscire dal programma devi fare un
Codice:
return 0;
ad esempio.

2. Il programma che hai scritto funziona se inserisci qualcosa del tipo 25/12/1987 e 20/9/1980, cioè con gg1>gg2 && mm1>mm2 && aa1>aa2.
Capirai da solo che non è l'unica condizione affinchè una data sia maggiore di un'altra. Se vuoi confrontare 22 con 100, ti conviene iniziare dalla cifra più significativa: 1>0 quindi sai subito che 100 è maggiore di 22.
Tornando al tuo caso, prima confronti l'anno: se sono uguali procedi a controllare anche il mese (e successivamente il giorno, se serve), altrimenti sei già arrivato alla conclusione.
__________________
59 trattative ok (ultimo: IntoTrouble)
royaleagle è offline   Rispondi citando il messaggio o parte di esso
Old 13-11-2008, 08:52   #13
Cadetto Entusiasta
Member
 
L'Avatar di Cadetto Entusiasta
 
Iscritto dal: Apr 2005
Città: Prov. di Torino
Messaggi: 164
Del ritorno della funzione del main non lo mai utilizzata, cioè non ciò mai fatto caso che alla fine ce la dovrei mettere. Adesso gliel'ho messa.

Per il controllo successivo delle date, io adesso come adesso ho il programma strutturato in questa maniera

"
#include <stdio.h>

int main ()
{

int gg1, gg2, mm1, mm2, aa1, aa2;

printf("Inserire prima data: ");
scanf("%d,%d,%d", &gg1, &mm1, &aa1);
while (getchar() != '\n');


printf("Inserire seconda data: ");
scanf("%d,%d%d", &gg2, &mm2, &aa2);

if(aa1>=aa2 && mm1>=mm2 && gg1>gg2)
printf("La prima data inserita è la più la recente\n");
else
printf("La seconda data inserita è la più recente\n");

return 0;
}
"

partendo appunto a controllare prima l'anno, il mese e il giorno se è maggiore o uguale; però la cosa non funge. Ma è giusto che continui a seguire la strada della sola stringa di if con questi tipi di controllo, o in essa ce qualcosa di sbagliato, o devo farlo ancora in un altro modo?
__________________
IMPOSSIBLE IS NOTHING
Cadetto Entusiasta è offline   Rispondi citando il messaggio o parte di esso
Old 13-11-2008, 09:23   #14
royaleagle
Senior Member
 
L'Avatar di royaleagle
 
Iscritto dal: Jan 2007
Messaggi: 1237
Codice:
if (aa1 > aa2) {//la data più recente è 1}
else if (aa1 < aa2) {//la data più recente è 2}
else{ //corrisponde al caso aa1 == aa2
      if (mm1 > mm2){//la data più recente è 1}
      else if (mm1 < mm2) {//la data più recente è 2}
      else{ //corrisponde al caso mm1 == mm2
            if(gg1 > gg2){//la data più recente è 1}
             else if (gg1 < gg2) {//la data più recente è 2}
            else {//le date sono uguali}
      }
}
__________________
59 trattative ok (ultimo: IntoTrouble)
royaleagle è offline   Rispondi citando il messaggio o parte di esso
Old 17-11-2008, 16:08   #15
Cadetto Entusiasta
Member
 
L'Avatar di Cadetto Entusiasta
 
Iscritto dal: Apr 2005
Città: Prov. di Torino
Messaggi: 164
Forse sono molto handicappato io (senza offesa per nessuno), ma io ho provato a mettere ciò che mi hai scritto per il programma, aggiungendo dei printf per dirmi delle cose ma non mi funge; mi dice sempre che il secondo anno inserito è il più recente, anche se io inserisco valori per cui mi deve dire il contrario.....
Adesso io ho il programma così:

#include <stdio.h>

int main ()
{

int gg1, gg2, mm1, mm2, aa1, aa2;

printf("Inserire prima data: ");
scanf("%d,%d,%d", &gg1, &mm1, &aa1);
while (getchar() != '\n');


printf("Inserire seconda data: ");
scanf("%d,%d%d", &gg2, &mm2, &aa2);

if (aa1 > aa2) {//la data più recente è 1
printf("L'anno più recente è il primo\n");
}
else
if (aa1 < aa2) {//la data più recente è 2
printf("L'anno più recente è il secondo\n");
}
else{ //corrisponde al caso aa1 == aa2
if (mm1 > mm2){//la data più recente è 1
printf("Il mese più recente è il primo\n");
}
else
if (mm1 < mm2) {//la data più recente è 2
printf("Il mese più recente è il secondo\n");
}
else{ //corrisponde al caso mm1 == mm2
if(gg1 > gg2){//la data più recente è 1
printf("Il giorno più recente è il primo\n");
}
else
if (gg1 < gg2) {//la data più recente è 2
printf("Il giorno più recente è il secondo\n");
}
else {//le date sono uguali}
printf("Le date sono uguali\n");
}
}
}

}
__________________
IMPOSSIBLE IS NOTHING
Cadetto Entusiasta è offline   Rispondi citando il messaggio o parte di esso
Old 17-11-2008, 17:55   #16
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Nel primo scanf() manca una virgola, mi sa che è quella che ti sballa tutto. Per il resto, manca il return 0 prima della fine del main().

ciao
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 17-11-2008, 18:02   #17
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Ah: tanto per allenamento, creati una funzione che confronti le due date e ti dica quale viene prima, poi usa quella dal main() per sapere cosa stampare.
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 17-11-2008, 22:35   #18
Cadetto Entusiasta
Member
 
L'Avatar di Cadetto Entusiasta
 
Iscritto dal: Apr 2005
Città: Prov. di Torino
Messaggi: 164
Quote:
Originariamente inviato da DanieleC88 Guarda i messaggi
Nel primo scanf() manca una virgola, mi sa che è quella che ti sballa tutto. Per il resto, manca il return 0 prima della fine del main().

ciao


Io ho provato ad aggiustare la virgola e ad aggiungere il return 0 alla fine, ma mi fa sempre la stessa cosa.....
Adesso ce l'ho così:

#include <stdio.h>

int main ()
{

int gg1, gg2, mm1, mm2, aa1, aa2;

printf("Inserire prima data: ");
scanf("%d,%d,%d", &gg1, &mm1, &aa1);
while (getchar() != '\n');


printf("Inserire seconda data: ");
scanf("%d,%d,%d", &gg2, &mm2, &aa2);

if (aa1 > aa2) {//la data più recente è 1
printf("L'anno più recente è il primo\n");
}
else
if (aa1 < aa2) {//la data più recente è 2
printf("L'anno più recente è il secondo\n");
}
else{ //corrisponde al caso aa1 == aa2
if (mm1 > mm2){//la data più recente è 1
printf("Il mese più recente è il primo\n");
}
else
if (mm1 < mm2) {//la data più recente è 2
printf("Il mese più recente è il secondo\n");
}
else{ //corrisponde al caso mm1 == mm2
if(gg1 > gg2){//la data più recente è 1
printf("Il giorno più recente è il primo\n");
}
else
if (gg1 < gg2) {//la data più recente è 2
printf("Il giorno più recente è il secondo\n");
}
else {//le date sono uguali}
printf("Le date sono uguali\n");
}
}
}

return 0;
}
__________________
IMPOSSIBLE IS NOTHING
Cadetto Entusiasta è offline   Rispondi citando il messaggio o parte di esso
Old 17-11-2008, 22:46   #19
royaleagle
Senior Member
 
L'Avatar di royaleagle
 
Iscritto dal: Jan 2007
Messaggi: 1237
Credo tu debba trattare separatamente le acquisizioni di giorno, mese ed anno.. Quindi 6 scanf in totale
__________________
59 trattative ok (ultimo: IntoTrouble)
royaleagle è offline   Rispondi citando il messaggio o parte di esso
Old 17-11-2008, 22:57   #20
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da royaleagle Guarda i messaggi
Credo tu debba trattare separatamente le acquisizioni di giorno, mese ed anno.. Quindi 6 scanf in totale
No, perché mai? Ho provato lo stesso codice che ha postato Cadetto Entusiasta nel precedente post, cambiando solo la virgola e il return (e le indentazioni nei controlli sulle date, ma non influiscono), e funziona bene, pare.
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


HONOR 400 Pro trasforma ogni scatto in capolavoro animato. Recensione HONOR 400 Pro trasforma ogni scatto in capolavor...
Intel Core Ultra 5 235 e Core Ultra 5 225F, CPU Arrow Lake per la fascia media Intel Core Ultra 5 235 e Core Ultra 5 225F, CPU ...
Roborock Saros Z70: un braccio meccanico per fare ordine in casa Roborock Saros Z70: un braccio meccanico per far...
I nuovi notebook Acer al debutto al Computex 2025 I nuovi notebook Acer al debutto al Computex 202...
Nutanix .NEXT: così l'azienda vuole aiutare i clienti a limitare la dipendenza da Broadcom Nutanix .NEXT: così l'azienda vuole aiuta...
OpenAI, Altman e Ive: il dispositivo IA ...
PlayStation Stars, chiude il programma f...
Torino dichiara guerra agli incivili in ...
Seat sulla buona strada per produrre la ...
Le novità Cryorig al Computex 202...
ASUS svela i nuovi ExpertBook ed ExpertC...
HONOR 400 Pro 5G e 400 5G ufficiali! L’A...
Intel lancia nuovi processori Xeon 6 ott...
Xiaomi raddoppia con YU7: fino a 835 km ...
Al via la sesta edizione di Startup Mara...
Google Cloud potenzia l'offerta per il c...
Google rivoluziona Chrome: il browser ca...
Nissan Micra EV: ecco svelata l'erede el...
La partita del secolo: 143.000 giocatori...
Amazon, i droni per le consegne possono ...
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: 17:00.


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