Problema input C#

Pubblicità

noel82

Utente Èlite
Messaggi
1,927
Reazioni
0
Punteggio
58
Ciao raga!

Stasera mentre stavo ca**eggiando con il compilatore di C# stavo provando a compilare un programmino semplice semplice, che prende i valori inseriti e poi li elabora a piacimento...
Il mio problema riguarda proprio l'immissione dei caratteri, anzi più correttamente di valori: per l'input di stringhe sono a conoscenza che si usa il metodo Console.ReadLine, ma non ricordo come si faccia per gli interi...il codice è il seguente (trasposto da quello funzionante per le stringhe):

using System;

class inputSomma
{
static void Main()
{
int numeroUno;
Console.Write("Inserisci un numero: ");
numeroUno=Console.Read();

int numeroDue;
Console.Write("Inserisci un altro numero: ");
numeroDue=Console.Read();

int somma;
somma=(numeroUno+numeroDue);
Console.WriteLine("La somma di {0} e {1} e':{2}",numeroUno,numeroDue,somma);

}
}


La compilazione è ok però i valori risultano sballati; so per certo che è sbagliato usare Console.Read per i valori interi ma non ricordo se bisogna fare qualche conversione o altro....

CIAUZZ
 
:) RISOLTO

Mi sono ricordato come si faceva:

il carattere digitato deve essere convertito in byte per essere associatoa variabile (nell'esempio "num")

num=Convert.ToByte(Console.ReadLine())

Me lo sono ricordato perchè si usa anche nelle istruzioni SWITCH :)

Ora funziona alla perfezione!


CIAUZZ
 
La Console.Read() legge un carattere dalla riga di comando, e lo interpreta come intero, quindi se tu immetti il carattere '1', lo prende come 49, se immetti '2' lo prende come 50, quindi la somma è 99!!!

E' come se tu sommassi i "caratteri" inteso come lettere 1 e 2 e non 1 e 2 come numero.

Puoi modificare il codice sottaendo ai numeri inseriti il valore 48 (il valore ascii di '0') cmq se immetti delle lettere tipo a o z rischi di sballare tutto. non puoi mettere neanche numeri con + di una cifra!!!!

Ecco il tuo prog. con questa piccola modifica:

using System;

class inputSomma
{
static void Main()
{
int numeroUno;
Console.Write("Inserisci un numero: ");
numeroUno=Console.Read();
numeroUno = numeroUno -48; // tolgo il valore di '0'

int numeroDue;
Console.Write("Inserisci un altro numero: ");
numeroDue=Console.Read();
numeroDue = numeroDue-48; // tolgo il valore di '0'


int somma;
somma=(numeroUno+numeroDue);
somma = somma +48; // rimetto il codice ascii appropriato
Console.WriteLine("La somma di {0} e {1} e':{2}",numeroUno,numeroDue,somma);

}
}



Ciao!!

EDIT: Per far leggere meglio il codice, ti conviene "indentarlo" cioè a ogni riga scritta dopo una parentesi graffa premi il "TAB" così si capisce quali parti di codice appartengono a un gruppo racchiuso tra parentesi
 
Ultima modifica:
Grazie della esauriente risposta! :)

Ma quindi la soluzione mia è sbagliata o può essere un alternativa??

CIAUZZ :)
 
Premesso che io conosco C e C++, C# non l'ho mai usato :D Cmq la converToByte dovrebbe convertire la Stringa presa dalla readline in un intero che va o da -128 a 127 o da 0 a 255, porva a vedere se c'è una convert to Integer o convert to Long ;)

in C standard si usano le funzioni atoi e atol, cerca una cosa simile.

Ciao!!
 
In teoria dovrebbe esserci il convert.ToInt16 o 32....dovrei provarlo ma qui al lavoro non ho un compilatore decente (o meglio ho provato Sharp Develop ma fa proprio pena:) )
Lo proverò più tardi con VS :)

CIAUZZ
 
Raga a me la conversione in32 non funzionaaaa!!!Ma porca!!!Questa la riga incriminante...

num = Convert.ToInt32(Console.Read());

num è un intero. Nonostante la conversione mi legge i numeri e li codifica in ascii
 
Pubblicità
Pubblicità
Indietro
Top