|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Apr 2005
Città: Prov. di Torino
Messaggi: 164
|
[C] Un warning su CodeBlocks
Ciao. Oggi mi stavo allenando a fare dei programmi usando prima if-else, e poi lo switch-case. Il fatto è che dovrei fare un programma in cui inserisco un numero da 1 a 12 e lui mi restituisce il nome del mese corrispondente. Ho fatto il programma, ma quando provo a inserirgli 10, 11, 12 mi da sempre gennaio. Guardando bene i build messages, in corrispondenza di questi valori mi da un warning dicendomi "multi-character character constant". Da quello che posso capire, non riesce a leggermi il secondo valore che gli inserisco e quindi mi da il corrispettivo del primo valore che legge. Qualcuno mi saprebbe aiutare, è da 2 ore che ci penso sopra ma senza arrivare ad una conclusione.
Qui sotto posto il programma che ho scritto: #include <stdio.h> main() { int MM; printf("Inserire un valore tra 1 e 12: \n"); MM = getchar (); switch (MM) { case '1': printf("Gennaio\n"); break; case '2': printf("Febbraio\n"); break; case '3': printf("Marzo\n"); break; case '4': printf("Aprile\n"); break; case '5': printf("Maggio\n"); break; case '6': printf("Giugno\n"); break; case '7': printf("Luglio\n"); break; case '8': printf("Agosto\n"); break; case '9': printf("Settembre\n"); break; case '10': printf("Ottobre\n"); break; case '11': printf("Novembre\n"); break; case '12': printf("Dicembre\n"); break; default: printf("Valore numerico non valido\n"); break; } }
__________________
IMPOSSIBLE IS NOTHING |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Feb 2006
Città: Provincia di BA!
Messaggi: 439
|
sarà perché con la getchar() prende solo un carattere e non 2??
__________________
~ Notebook: Dell Studio 1537 - Intel Core 2 Duo T6400 @ 2,00 GHz ~ ~ Cel: Nokia 5230 ~ Console: Nintendo Wii "La menopausa è quando i cacciatori ubriachi sparano alla cicogna che porta i bebè..."
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Dec 2003
Messaggi: 4907
|
Non solo:
Codice:
case '12': |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Apr 2005
Città: Prov. di Torino
Messaggi: 164
|
ah capito, e come potrei ovviare a sto problema? mi chiesto espressamente di farlo con switch-case...
__________________
IMPOSSIBLE IS NOTHING |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2006
Messaggi: 22462
|
memorizzando la scelta in un int senza passare da char utilizzando lo scanf()
__________________
amd a64x2 4400+ sk939;asus a8n-sli; 2x1gb ddr400; x850 crossfire; 2 x western digital abys 320gb|| asus g1
Se striscia fulmina, se svolazza l'ammazza |
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Apr 2005
Città: Prov. di Torino
Messaggi: 164
|
ok va bene, domani c provo, poi se nn ci riesco rompo ancora.... A domani.
__________________
IMPOSSIBLE IS NOTHING |
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Apr 2005
Città: Prov. di Torino
Messaggi: 164
|
ok mi è andato tutto bene, ho fatto come mi avete suggerito e non ho avuto problemi.
Adesso però, per non aprire un nuovo topic, ho un altro problemino: nell'esercizio seguente, mi viene chiesto di fare un programma inserendo un anno AA e verificare che sia bisestile. il fatto che io ho provato a farlo, ma di sicuro ho sbagliato qualcosa nelle istruzioni dell'if, perchè mi viene anche suggerito che un anno bisestile è divisibile per 4 ma non per 100, escludendo gli anni-secolo. Qui di seguito posto il programma da me "iniziato". #include <stdio.h> #include <stdlib.h> int main() { int x; printf("Inserire anno: \n"); scanf("%d", &x); if (x / 4 && ! x /100) printf("L'anno inserito è bisestile\n"); else printf("Reinserire nuovi dati\n"); }
__________________
IMPOSSIBLE IS NOTHING |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Feb 2006
Città: Provincia di BA!
Messaggi: 439
|
la condizione di "numero divisibile per..." non coincide con la divisione:
nell'if gli stai dicendo "se x/4 e non x/100" non vuol dire niente per almeno 2 motivi: 1)gli passi 2 cifre e chiedi di fare la divisione per 100... essendo 2 interi hai sicuramente 0 (da quello che si capisce dalla traccia visto che chiami l'anno AA) 2)entrambe le operazioni hanno un risultato ma non è quello che ti interessa: ti interessa che il RESTO della divisione per 4 o per 100 siano 0 o meno... conclusione: se vuoi sapere se un numero x è divisibile per un numero y la condizione è " x%y == 0 ?"
__________________
~ Notebook: Dell Studio 1537 - Intel Core 2 Duo T6400 @ 2,00 GHz ~ ~ Cel: Nokia 5230 ~ Console: Nintendo Wii "La menopausa è quando i cacciatori ubriachi sparano alla cicogna che porta i bebè..."
|
|
|
|
|
|
#9 | |
|
Member
Iscritto dal: Apr 2005
Città: Prov. di Torino
Messaggi: 164
|
Quote:
__________________
IMPOSSIBLE IS NOTHING |
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Feb 2006
Città: Provincia di BA!
Messaggi: 439
|
in pratica la condizione da mettere nell'if è:
(x&4 == 0) && (x%100 != 0)
__________________
~ Notebook: Dell Studio 1537 - Intel Core 2 Duo T6400 @ 2,00 GHz ~ ~ Cel: Nokia 5230 ~ Console: Nintendo Wii "La menopausa è quando i cacciatori ubriachi sparano alla cicogna che porta i bebè..."
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quello che ti sta suggerendo anyanka è di usare l'operatore modulo [%] per verificare se un numero intero è divisibile per un altro numero intero.
In pratica l'operatore modulo ti restituisce il resto della divisione intera tra due interi. Es.: 10 diviso 4 fa 2 con resto di 2. In codice: Codice:
int resto; resto = 10 % 4; Quindi per verificare la divisibilità di un numero intero "n" con un altro numero intero "m" basta verificare che il risultato di "n" modulo "m" sia uguale a zero. In codice: Codice:
int n;
int m;
if (n % m == 0)
{
// ... n è divisibile per m
}
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:42.




















