|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Sep 2005
Messaggi: 27
|
[c/c++] Controllo dati immessi
Ciao, devo controllare che il dato inserito dall'utente sia numerico e che quindi non contenga lettere. In più, devo visualizzare se l'utente preme <ctrl>+z . Ora, sapendo che se si preme <ctrl>+z con getchar viene restituito il valore -1, perchè il programma non funziona se viene premuto ctrl+z?
Codice:
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
main(){
int c, flagErr, flag2;
flagErr = 0;
flag2 = 0;
while(c!=0 && c!=10){
c=getchar();
//
if(c!=10){
if(c<'0' || c>'9'){
flagErr = 1;
}
if(c==-1){
flag2 = 1;
}
//printf("%d\n", c);
}
}
if(flagErr==1){
printf("Non hai inserito un valore numerico corretto!\n");
}else{
printf("Hai inserito un valore numerico corretto!\n");
}
if(flag2==1){
printf("Hai battuto <ctrl>+z \n");
}
scanf("%d");
}
Grazie |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Sep 2005
Messaggi: 27
|
Grazie mille per la risposta.. cerco di chiarirti meglio cosa intendo fare:
devo realizzare una funzione che stailisca la validità di un valore numerico inserito e che restituisca il valore EOF se l'utente preme ctrl+z. Per semplicità, prima di creare una funzione apposta, volevo fare prima un programma di main (diciamo un "abbozzo") per non incasinarmi con le funzioni. Ho inserito il controllo per c!=10 perchè ho il problema dell'invio... se l'utente preme INVIO dopo aver inserito una certa quantità di cifre, quell'invio è considerato come un carattere e il programma va avanti, che è quello che non voglio.... voglio che dopo che l'utente prema invio il dato sia preso come definitivo. Ho provato così, ma non riesco ancora a stabilire quando si è premuto ctrl+z Codice:
int main(){
int i, c, flagErr, flagEOF, flagSign, flagPoint;
flagErr = 0;
flagEOF = 0;
flagSign = 0;
flagPoint = 0;
i=0;
c=1;
do{
c=getchar();
if(c!=10){
if((c<'0' || c>'9') && c!='-' && c!='+' && c!='.' && c!=26)
flagErr = 1;
if(c==26) flagEOF = 1;
if(c=='+'){
flagSign++;
if(i>0)
flagSign++;
}
if(c=='-'){
flagSign++;
if(i>0)
flagSign++;
}
if(c=='.') flagPoint++;
// printf("%d\n", flagEOF);
}
i++;
}while(c!=0 && c!=10);
if(flagSign>1) printf("Problema di segno\n");
if(flagPoint>1) printf("Problema di punto\n");
if(flagErr==1) printf("Problema di lettere\n");
if(flagEOF==1) printf("Hai battuto ctrl+z\n");
scanf("%d");
return 0;
}
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:24.


















