Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di garlick
    Registrato dal
    Dec 2001
    Messaggi
    385

    [c] Controllo valore immesso

    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. #2
    Usa la funzione isdigit(int c) dichiarata in <ctype.h> , che ritorna un valore positivo se il carattere immesso è una cifra .

  3. #3
    Utente di HTML.it L'avatar di garlick
    Registrato dal
    Dec 2001
    Messaggi
    385
    Originariamente inviato da king64
    Usa la funzione isdigit(int c) dichiarata in <ctype.h> , che ritorna un valore positivo se il carattere immesso è una cifra .
    Si lo so che esiste ma non posso usarla per consegna dell'esercizio...poi il problema non è stabilire se è una cifra o meno, per quello il programma funziona. Il problema è stabilire quando si è battuto <ctrl>+z

  4. #4
    Utente di HTML.it L'avatar di garlick
    Registrato dal
    Dec 2001
    Messaggi
    385
    Stavo provando ad implementare tutto in una funzione che resituisse un codice di errore se il valore non era corretto:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    int checkNum();
    
    main(){
    
    int var;
    
    var = checkNum();
    
    printf("%d", var);
           
    scanf("%d");
    
    }
      
      int checkNum(){
      
             /*LEGENDA DEGLI ERRORI DI RITORNO
             
             0 = Nessun Errore
             1 = Trovati valori non numerici
             2 = Problemi con l'uso del segno
             3 = Problemi con l'uso del punto
        
           */
    
    
           int i, c, flagErr, flagEOF, flagSign, flagPoint;
           flagErr = 0;
           flagEOF = 0;
           flagSign = 0;
           flagPoint = 0;
           i=0;
           
           
           while(c!=0 && c!=10){
           
           c=getchar();
           
              if(c!=10){
           
                  if((c<'0' || c>'9')  && c!='-' && c!='+' && c!='.' && c!=EOF)
           
                  flagErr = 1;
         
                  if(c==EOF) flagEOF = 1;  
                                
                
                  if(c=='+'){
                     flagSign++;
                     
                     if(i>0)
                       flagSign++;
                  }
                  
                  
                  if(c=='-'){
                     flagSign++;
                     
                     if(i>0)
                       flagSign++;
                  } 
                  
                   if(c=='.')  flagPoint++;   
                          
              
         //  printf("%d\n", flagEOF);                 
              }      
         
         i++;
         
         }
           
           if(flagSign>1) return 2;
           
           if(flagPoint>1) return 3;
           
           if(flagErr==1) return 1;
        
           if(flagEOF==1) printf("Hai battuto \n");    
     
      }
    Ma così non funziona per niente, non aspetta neanche che inserisca un valore

    Ma come mai??

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.