Torna indietro   Hardware Upgrade Forum > Software > Programmazione

realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole!
realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole!
Hogwarts arriva in fascia media grazie a realme, con una special edition che unisce la Quadra Light-Sensing Color-changing Tech, un baule in stile Hogwarts Express pieno di collezionabili e una scheda tecnica sostanzialmente identica al 16 Pro di partenza: ecco cosa cambia davvero, come si comporta nell'uso quotidiano e quanto vale in base al prezzo di 699,99 euro
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
REDMI Note 17 Pro porta in fascia media una batteria da 8.340 mAh con ricarica HyperCharge a 67W, un display AMOLED da 6,83 pollici capace di picchi di luminosità molto elevati e una struttura certificata TÜV SÜD contro cadute e infiltrazioni d'acqua, il tutto racchiuso in una scocca da 223 grammi. Lo abbiamo provato per diversi giorni tra fotocamera, prestazioni, autonomia e prezzo sul mercato italiano
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 12-03-2006, 12:24   #1
Biscazziere
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
Biscazziere è offline   Rispondi citando il messaggio o parte di esso
Old 12-03-2006, 16:13   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da Biscazziere
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?
Intanto ci sono diverse cose che non vanno nel tuo sorgente:
  • Quel -1 di cui parli è il EOF. Sui sistemi Dos/Win, dalla console, la pressione della combinazione ctrl+z fa restituire alla getchar il codice 26 (0x1A).
  • È poco utile l'uso di un ciclo 'while' quando invece sarebbe più logico usare il ciclo 'do-while' (dopotutto, la getchar la devi eseguire almeno 1 volta!).
  • La variabile 'c' non è inizializzata.
  • Nel ciclo while comunque non hai messo un qualcosa (es. break) per uscire dal ciclo. Testi se c è diverso da 0 (e in quale condizione te lo darebbe?) e se è diverso da 10 (perché??).
  • Dichiara sempre int main () e restituisci un valore interno.
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 12-03-2006, 18:47   #3
Biscazziere
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;

}
Grazie di nuovo!
Biscazziere è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole! realme 16 Pro Harry Potter Edition: il nuovo mid...
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
28 offerte Amazon da non perdere: e-bike...
'Il rapporto con Sony è rimasto f...
Vision AI Upscaling e Micro RGB AI Engin...
NVIDIA GeForce RTX 6000, anche il leaker...
In arrivo la 'pagella' per i datacenter:...
Celle perovskite-silicio al 34% grazie a...
Apple prepara il suo nuovo hub intellige...
La Cadillac Lyriq-V elettrica sbarca in ...
Amazon: arriva l'opzione per aggiungere ...
Un developer usa Claude Code per creare ...
Relativity Space annuncia i progressi ne...
Il nuovo Resident Evil supera ogni prece...
Hai appena sconfitto un boss e parte lo ...
Ray tracing anche senza montagne di VRAM...
TSMC prepara il processo a 1,4 nm: quatt...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 23:59.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v