PDA

View Full Version : Problemi lettura carattere newline c++


Marcomass
17-06-2015, 08:45
Ciao a tutti!!!
ho scritto questo semplice codice per capire un po' come funzioni la conversione da char a integer e viceversa in c++:

#include <stdlib.h>
#include <stdio.h>

int main(){
int i;
char c;

printf("scrivi un numero e ti daro il corrispondente ASCII: ");
scanf("%d",&i);
printf("il numero %d corrisponde a %c ASCII",i,i);

printf("\nscrivi un carattere e ti daro il corrispondente intero: ");
scanf("%c",&c);
printf("\nil numero %c corrisponde a %d ASCII",c,c);

return 0;
system("pause");
}
Lancio l'pplicazione e scrivo il numero, poi premo enter per continuare, il problema è che il programma legge il numero come int (e fin qui ok) poi però prende il carattre newline come char e quindi mi da sempre un valore di 10...
so che è una stupidaggine :) :) ma non ne vengo a capo :fagiano:
Muchas gracias :cool: :)

Samuele_70
17-06-2015, 22:16
Devi estrarre il carattere di ritorno a capo dal buffer di input ( e magari anche tutti gli altri eventuali caratteri residui)

#include <stdlib.h>
#include <stdio.h>

int main()
{
int i;
char c;
printf("Scrivi un numero e ti daro il corrispondente ASCII: ");
scanf("%d", &i);

while( getchar() != '\n'); // Estrae caratteri residui dal buffer di input

printf("Il numero %d corrisponde al carattere ASCII '%c'\n\n", i ,i);
printf("Scrivi un carattere e ti daro il corrispondente intero: ");
scanf("%c", &c);

while( getchar() != '\n'); // Estrae caratteri residui dal buffer di input

printf("il carattere '%c' corrisponde al codice %d\n", c, c);

puts("\nPremi INVIO per uscire...");
getchar();
return 0;
}

Marcomass
19-06-2015, 15:45
Grazie mille! sto ancora cercando di capire come funzioni il c, facendo qualche programmino mi sono accorto che mi capita spesso di dover inserire la riga while( getchar() != '\n'); mi sembra un po' laborioso, si può dare l'input utilizzando un altro tasto (invece che enter)

Samuele_70
20-06-2015, 08:41
Grazie mille! sto ancora cercando di capire come funzioni il c, facendo qualche programmino mi sono accorto che mi capita spesso di dover inserire la riga while( getchar() != '\n'); mi sembra un po' laborioso,
Non conosco alternative altrettanto valide, e francamente non credo che ne esistano.
A meno che tu non voglia reinventare la ruota (come si suol dire) e voglia crearti una tua libreria per la gestione dell'input, che utilizzi direttamente le API di sistema, per gestire in modo più 'estroso' l'immissione di caratteri da tastiera. :mc:
Ma ne varrebbe la pena ? Sapendo che esiste già un sistema standard e collaudato ?
si può dare l'input utilizzando un altro tasto (invece che enter)
Non capisco cosa vuoi dire :confused:

Marcomass
20-06-2015, 11:21
Ok grazie ho capito :)

GTKM
20-06-2015, 12:10
Quello del dover svuotare il buffer di input è un "ostacolo" in cui ci siamo imbattuti tutti. :D

Attenzione, qualcuno potrebbe consigliarti (o potresti leggerlo su certi forum, non qui) di usare fflush(stdin) per svuotare il buffer di input. Non farlo. :D