[C#] Problema programma con condizione if
  • In diretta da GamesVillage.it
    • News
    • -
    • In Evidenza
    • -
    • Recensioni
    • -
    • RetroGaming
    • -
    • Anteprime
    • -
    • Video
    • -
    • Cinema

Pag 1 di 3 123 UltimoUltimo
Visualizzazione risultati da 1 a 15 di 32

Discussione: [C#] Problema programma con condizione if

Cambio titolo
  1. #1
    Utente L'avatar di Gogeta super sayan.
    Registrato il
    02-07
    Località
    FI
    Messaggi
    2.802

    [C#] Problema programma con condizione if

    ciao a tutti. Ho un problema con un semplice programma con if. Guardate, questo è il codice funzionante:
    Codice:
    
    //questo programma controlla se un numero è > di 50
    using System;
    classif1
    {
    staticvoid Main()
    {
    //dichiaro la variabile intera
    int numero;
    //stampa un messaggio
    Console.Write("\nInserisci un numero ");
    //legge e converte un numero
    numero =Convert.ToInt32(Console.ReadLine());
    //controlla se numero è > di 50
    if (numero > 50)
    {
    //stampa se la condizione è verificata (True)
    Console.WriteLine("\nIl numero inserito è più grande di 50");
    }
    //stampa un messaggio di fine programma
    Console.Write("Il programma è terminato");
    Console.ReadKey();
    }
    }
    
    e invece questo codice (che ho scritto io) non funziona bene:
    Codice:
    
    //questo programma controlla se un numero è > di 50
    using System;
    classif1
    {
    staticvoid Main()
    {
    //dichiaro la variabile intera
    int numero;
    //stampa un messaggio
    Console.Write("\nInserisci un numero ");
    //legge e converte un numero
    numero =Console.Read();
    //controlla se numero è > di 50
    if (numero > 50)
    {
    //stampa se la condizione è verificata (True)
    Console.WriteLine("\nIl numero inserito è più grande di 50");
    }
    //stampa un messaggio di fine programma
    Console.Write("Il programma è terminato");
    Console.ReadKey();
    }
    }
    
    Da quanto ho capito è nella riga in cui c'è " convert...." l'errore. Ma non capisco...


  2. #2
    Utente L'avatar di devilheart
    Registrato il
    01-03
    Messaggi
    28.310
    non so quanto sia fortemente tipato il c# ma ad occhio il tipo restituito da Console.Read() è incompatibile con il tipo int

  3. #3
    Ex ***** VIPz Estathé L'avatar di nicjedi
    Registrato il
    12-02
    Località
    non vivo
    Messaggi
    16.158
    allora, Console.Read() ritorna si un intero, ma il corrispettivo ASCII del carattere...
    Inolter non riuscirai mai a leggere un numero maggiore di 50, dato che Read legge carattere per carattere, come getch() per il c.
    "La violenza è l'ultimo rifugio degli incapaci"
    "Non lasciare mai che la morale ti impedisca di fare la cosa giusta"
    "La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta."
    "fare molte cose alla volta significa non farne bene nessuna"


  4. #4
    Utente L'avatar di Gogeta super sayan.
    Registrato il
    02-07
    Località
    FI
    Messaggi
    2.802
    Citazione nicjedi Visualizza Messaggio
    allora, Console.Read() ritorna si un intero, ma il corrispettivo ASCII del carattere...
    Inolter non riuscirai mai a leggere un numero maggiore di 50, dato che Read legge carattere per carattere, come getch() per il c.
    carattere per carattere , cioè a, b, c....? Poi volevo anche sapere. Ma int e int 32 non sono la stessa cosa? Perchè int torna il codice ASCII? Con le calcolatrici ecc funziona.


  5. #5
    Utente L'avatar di Gogeta super sayan.
    Registrato il
    02-07
    Località
    FI
    Messaggi
    2.802
    qualcuno mi risponda!
    Spoiler:
    please


  6. #6
    Everything Ends L'avatar di Carmine_XX
    Registrato il
    12-06
    Località
    Milano
    Messaggi
    7.054
    Citazione Gogeta super sayan. Visualizza Messaggio
    carattere per carattere , cioè a, b, c....? Poi volevo anche sapere. Ma int e int 32 non sono la stessa cosa? Perchè int torna il codice ASCII? Con le calcolatrici ecc funziona.
    int corrisponde a Int32 che sarebbe il tipo integer base di .Net.
    Viene usato così in modo che invece di fare System.Type.Int32 fai solo "int"; e oltretutto sembra più somigliante ad altri linguaggi come java e C++.

    Carattere per carattere cioè appunto ogni singolo carattere della linea alla volta.
    Se vuoi leggere una riga intera in una sola volta devi usare Console.ReadLine().

    Usare Convert per trasformare il valore "grezzo" di ReadLine in un Integer è il modo migliore.
    Se non sbaglio potresti fare anche il boxing automatico, mettendo Console.ReadLine() senza il convert; l'importante è che la variabile "numero" sia di tipo int.
    Vorrei veder più fuoco ch'acqua o terra
    e 'l mondo e 'l cielo in peste e 'n fame e 'n guerra
    L'HO EMULATO --> qui

  7. #7
    Puppppppaaaaaaaaaaa L'avatar di Revan1985
    Registrato il
    01-06
    Località
    Solbiate Olona
    Messaggi
    1.655
    carattere carattere :
    azzetua => 'a' 'z' 'z' 'e' 't' 'u' 'a'
    se leggi con .Read(), prendi solo il primo, cioè a.

    Int e Int32 sono sostanzialmente la stessa cosa, ma cambia da compilatore a compilatore [ su alcuni sistemi potrebbe essere a 16 bit, in altri a 8, altri a 64, e cosi via ]

    perchè int torna il carattere ascii non saprei, leggi sul manuale...
    ah, e per la cronaca, non è una chat, se non ti rispondono, aspetta tipo 18/24h, non sono sempre sui pc le persone ^^
    È stato detto che la democrazia è la peggior forma di governo, eccezion fatta per tutte quelle altre forme che si sono sperimentate finora.


  8. #8
    Ex ***** VIPz Estathé L'avatar di nicjedi
    Registrato il
    12-02
    Località
    non vivo
    Messaggi
    16.158
    Citazione Gogeta super sayan. Visualizza Messaggio
    carattere per carattere , cioè a, b, c....? Poi volevo anche sapere. Ma int e int 32 non sono la stessa cosa? Perchè int torna il codice ASCII? Con le calcolatrici ecc funziona.
    non hai capito..è Read che torna il codice ASCII...che appunto è un valore intero...
    "La violenza è l'ultimo rifugio degli incapaci"
    "Non lasciare mai che la morale ti impedisca di fare la cosa giusta"
    "La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta."
    "fare molte cose alla volta significa non farne bene nessuna"


  9. #9
    Utente L'avatar di Gogeta super sayan.
    Registrato il
    02-07
    Località
    FI
    Messaggi
    2.802
    Citazione nicjedi Visualizza Messaggio
    non hai capito..è Read che torna il codice ASCII...che appunto è un valore intero...
    ok. Con Console.Read(); torna il codice ASCII. Ma nel programma mettono anche il convert se funziona anche solo con il ReadLine?


  10. #10
    Ex ***** VIPz Estathé L'avatar di nicjedi
    Registrato il
    12-02
    Località
    non vivo
    Messaggi
    16.158
    Citazione Gogeta super sayan. Visualizza Messaggio
    ok. Con Console.Read(); torna il codice ASCII. Ma nel programma mettono anche il convert se funziona anche solo con il ReadLine?
    ReadLine a differenza di Read ti torna una stringa..quindi puoi usare il convert per convertirla in intero...
    "La violenza è l'ultimo rifugio degli incapaci"
    "Non lasciare mai che la morale ti impedisca di fare la cosa giusta"
    "La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta."
    "fare molte cose alla volta significa non farne bene nessuna"


  11. #11
    Utente L'avatar di Gogeta super sayan.
    Registrato il
    02-07
    Località
    FI
    Messaggi
    2.802
    Citazione nicjedi Visualizza Messaggio
    ReadLine a differenza di Read ti torna una stringa..quindi puoi usare il convert per convertirla in intero...
    allora, intanto. 50 è una stringa? Spiegate dettagliamente, perfavore.
    Spoiler:
    sono deficente


  12. #12
    XD:| L'avatar di diablosoftware
    Registrato il
    10-05
    Messaggi
    3.724
    Citazione Gogeta super sayan. Visualizza Messaggio
    allora, intanto. 50 è una stringa? Spiegate dettagliamente, perfavore.
    Spoiler:
    sono deficente
    Il 50 restituito da ReadLine è una stringa, quindi formato da un carattere 5 e da un carattere 0 (correggetemi se sbaglio), in questo formato il valore non è utilizzabile da una variabilie int (in int il 50 è un numero).
    Il Console.ReadLine() restituisce un valore String

    Usando il valore del ReadLine con una variabile int restituirà errore perchè il formato non è corretto.
    Quindi con
    numero = Convert.ToInt32(Console.ReadLine());
    dico al programma di convertire il tipo di dato String in un tipo di dato Int32.

    Ti consiglio di imparare a guardare bene l'intellisense, che ti dice la variabile restituita dalla funzione che vuoi utilizzare
    Ultima modifica di diablosoftware; 14-04-2008 alle 10:18:50

  13. #13
    Everything Ends L'avatar di Carmine_XX
    Registrato il
    12-06
    Località
    Milano
    Messaggi
    7.054
    Citazione diablosoftware Visualizza Messaggio
    Il 50 restituito da ReadLine è una stringa, quindi formato da un carattere 5 e da un carattere 0 (correggetemi se sbaglio), in questo formato il valore non è utilizzabile da una variabilie int (in int il 50 è un numero).
    Il Console.ReadLine() restituisce un valore String

    Usando il valore del ReadLine con una variabile int restituirà errore perchè il formato non è corretto.
    Quindi con
    numero = Convert.ToInt32(Console.ReadLine());
    dico al programma di convertire il tipo di dato String in un tipo di dato Int32.

    Ti consiglio di imparare a guardare bene l'intellisense, che ti dice la variabile restituita dalla funzione che vuoi utilizzare
    Comunque dovrebbe fare il boxing automatico nel caso si metta direttamente:

    int numero = Console.ReadLine().

    Che poi non sia proprio di "eleganza di programmazione" è un altro discorso.
    Vorrei veder più fuoco ch'acqua o terra
    e 'l mondo e 'l cielo in peste e 'n fame e 'n guerra
    L'HO EMULATO --> qui

  14. #14
    StorieDallaSalaMacchine L'avatar di miniBill '90
    Registrato il
    08-05
    Località
    Bergerac
    Messaggi
    4.204
    Citazione Carmine_XX Visualizza Messaggio
    Comunque dovrebbe fare il boxing automatico nel caso si metta direttamente:

    int numero = Console.ReadLine().

    Che poi non sia proprio di "eleganza di programmazione" è un altro discorso.
    sei sicuro di quel codice?

    ESISTE UN UNICO AMMINISTRATORE
    Quoto-thisisgorman-
    (La mi ex-firma sta qua)

  15. #15
    l' oscuro nemico L'avatar di morgoth90
    Registrato il
    05-06
    Località
    C LikeLandia
    Messaggi
    2.275
    non sono sicuro che in c# lo faccia, in vb.net lo fa ma in vb fa fare anche molte altre cose illogiche per facilitare



    ESISTE UN UNICO AMMINISTRATORE


Pag 1 di 3 123 UltimoUltimo

Regole di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •