Verifca se inesrisco un numero

di il
24 risposte

Verifca se inesrisco un numero

Buonq sera inserisco questo codice con l'intento di verificare se il dato inserito è un numero,in questo caso mi appare un mes
saggio di conferma.In caso contrario mi appare una altro messaggio, con la proposta di inserire di nuovo i dati.
Il problema che in questa istanza, ovvero quando devo reineerire di nuovo i dati, questo messaggio mi appare tante volte, e non riesco a capire come risolvere il problema.
Grazie per l'aiuto

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define MAXINPUT 100
//Programma che verifica se è stato inserito un numero o un carattere
int main()
{
    char input[MAXINPUT] = "" ;
    char  carattere="";
    int length,i;
    int flag=2;
printf("%s \n", "Digita Un numero:");
scanf ("%c", &input);
  length = strlen (input);
  do

{

    flag=2;

    for (i=0;i<length; i++)

    {
           if (!isdigit(input[i]))//sedigito una lettera

        {

             flag=1;//Imposto il flag

        }
      else  printf ("Given input is a number\n");

    if (flag==1)//verifico la digitazione di una lettera e riprovo ad inserirla
    {
         printf ("Entered input is not a number\n");
          printf(" %s \n ", "riprova:");
          printf("%s \n", "Ridigita Un numero:");
            scanf ("%c", &input);

             //length = strlen (input);


             input[i]="";//reimposto l'array
    }

     }

     //if (flag==0)printf ("Given input is a number\n");

    }while(flag==1);
}

24 Risposte

  • Re: Verifca se inesrisco un numero

    Intanto metti la domanda fuori dal codice.

    Poi che intendi con ‘in questa istanza’?

    Poi, se le printf sono all'interno della for, saranno ripetute per ogni carattere

  • Re: Verifca se inesrisco un numero

    04/10/2023 - oregon ha scritto:


    Intanto metti la domanda fuori dal codice.

    Poi che intendi con ‘in questa istanza’?

    Poi, se le printf sono all'interno della for, saranno ripetute per ogni carattere

    per istanza ,significa che quando mi appare il messaggio che i dato inserito non è un numero,lo stesso mi appare tante volte quante sono le lettere inserite, Grazie per l'attenzione.

  • Re: Verifca se inesrisco un numero

    Va beh, “in questa istanza” non ha nessun senso in questa discussione.

    Comunque ti ho spiegato perchè succede.  

  • Re: Verifca se inesrisco un numero

    Il problema che hai è concettuale. 

    Immagina di inserire la stringa (che supponiamo ci stia) “321zero222333444111mic”.  Domanda preliminare: è un numero o no? Seconda domanda: tu in quale momento ti accorgi se è o meno un numero?  Quindi, che informazione puoi ricavare dall'aver letto un solo carattere, e quale invece ricavi dall'aver letto l'intera stringa?

    Temo che ad aiutarti di più finisca per farti il compito (cosa che mi divertirebbe, ma che è fuori dagli scopi del forum)

  • Re: Verifca se inesrisco un numero

    04/10/2023 - silente ha scritto:


    che è fuori dagli scopi del forum

    Oltre al fatto che è contro il buon senso dato che il suo professore ha dato a lui il compito.

  • Re: Verifca se inesrisco un numero

    04/10/2023 - oregon ha scritto:


    04/10/2023 - silente ha scritto:


    che è fuori dagli scopi del forum

    Oltre al fatto che è contro il buon senso dato che il suo professore ha dato a lui il compito.

    Grazie della Risposta Oregon,non sono studente ,ma un cinquatenne autodidatta, tengo conto dei tuoi consigli,però devo studiare le stringe,perchè in c non le conosco. Volevo scrivere questo codice perchè ho realizzato una calcolatrice, e volevo completarla col controllo del segno, e del numero.

    Pensavo che era più facile gestirle come visual basic, ma la filosofia è diversa almeno credo.

  • Re: Verifca se inesrisco un numero

    04/10/2023 - silente ha scritto:


    Il problema che hai è concettuale. 

    Immagina di inserire la stringa (che supponiamo ci stia) “321zero222333444111mic”.  Domanda preliminare: è un numero o no? Seconda domanda: tu in quale momento ti accorgi se è o meno un numero?  Quindi, che informazione puoi ricavare dall'aver letto un solo carattere, e quale invece ricavi dall'aver letto l'intera stringa?

    Temo che ad aiutarti di più finisca per farti il compito (cosa che mi divertirebbe, ma che è fuori dagli scopi del forum)

    Hai ragione ,il mio prblema che non conosco le stringhe ,

    .Volevo scrivere questo codice perchè ho realizzato una calcolatrice, e volevo completarla col controllo del segno, e del numero.

    Pensavo che era più facile gestirle come visual basic, ma la filosofia è diversa almeno credo.

  • Re: Verifca se inesrisco un numero

    Il C è un linguaggio di basso livello in cui tutto è meno immediato da farsi e si devono creare da zero le funzionalità che sembrano scontate in altri linguaggi.

     Per il controllo puoi affidarti al valore restituito dalla scanf (che come funzione restituisce un valore il cui significato puoi vedere nella documentazione).

    Un modo può essere appunto accettare una stringa e controllare ogni carattere. Ovviamente devi avere molta confidenza con le stringheche in C sono semplici vettori di caratteri terminati da un byte a zero.  

    In quanto autodidatta dovresti ancora di più tentare di risolvere da solo dopo aver studiato dai libri, documentazione online e altro.

    Se ti sembra che sia “poco produttivo” e lontano dai tuoi scopi, lascia stare il C e usa il VB 

  • Re: Verifca se inesrisco un numero

    07/10/2023 - oregon ha scritto:


    Il C è un linguaggio di basso livello in cui tutto è meno immediato da farsi e si devono creare da zero le funzionalità che sembrano scontate in altri linguaggi.

     Per il controllo puoi affidarti al valore restituito dalla scanf (che come funzione restituisce un valore il cui significato puoi vedere nella documentazione).

    Un modo può essere appunto accettare una stringa e controllare ogni carattere. Ovviamente devi avere molta confidenza con le stringheche in C sono semplici vettori di caratteri terminati da un byte a zero.  

    In quanto autodidatta dovresti ancora di più tentare di risolvere da solo dopo aver studiato dai libri, documentazione online e altro.

    Se ti sembra che sia “poco produttivo” e lontano dai tuoi scopi, lascia stare il C e usa il VB 

    no continuo col c ,perchè mi piace e poi vorrei usarlo per arduino,ed i pic,Grazie per la pazienza

  • Re: Verifca se inesrisco un numero

    Ciao,

    carica la stringa di input che hai in un arrary

    enumera l'array e controlla con isdigit se il carattere è numerico oppure no

    appena trovi un carattere che non risulta essere numerico, allora esci dall'enumerazione ed emetti il messaggio di errore 

    Ti bastano 3 righe di codice con una variabile bool per fare il controllo  


    Se vuoi testare e validare un carattere alla volta, l'ultimo carattere inserito, allora non ti serve valutare la stringa di input per intera e fai il test del carattere con isdigit e magari in ogni caso che non sia uno spazio

    ;-))

  • Re: Verifca se inesrisco un numero

    07/10/2023 - Antonio-Sim ha scritto:


    no continuo col c ,perchè mi piace e poi vorrei usarlo per arduino,ed i pic,Grazie per la pazienza

    Per arduino penso potresti anche fare con il C# 

    un pò più simile al Vb e a un livello sopra al C che ti semplifica l'apprendimento e la scrittura del codice.

  • Re: Verifca se inesrisco un numero

    07/10/2023 - By65Franco ha scritto:


    Per arduino penso potresti anche fare con il C# 

    un pò più simile al Vb e a un livello sopra al C che ti semplifica l'apprendimento e la scrittura del codice.

    Il linguaggio di programmazione usato in Arduino è una versione semplificata del linguaggio C con in aggiunta delle funzioni specifiche per gestire in maniera semplice le interfacce di input/output della scheda e i programmi vengono scritti tramite il suo IDE:

    https://docs.arduino.cc/software/ide-v2/tutorials/getting-started-ide-v2#requirements 

    Aggiungo il link alla pagina di riferimento per il linguaggio di programmazione;

    https://www.arduino.cc/reference/en/

  • Re: Verifca se inesrisco un numero

    07/10/2023 - euscar ha scritto:


    Il linguaggio di programmazione usato in Arduino è una versione semplificata del linguaggio C con in aggiunta delle funzioni specifiche per gestire in maniera semplice le interfacce di input/output della scheda e i programmi vengono scritti tramite il suo IDE:

    https://docs.arduino.cc/software/ide-v2/tutorials/getting-started-ide-v2#requirements 

    Ciao,

    perfetto, grazie mille per info

  • Re: Verifca se inesrisco un numero

    07/10/2023 - By65Franco ha scritto:


    Ciao,

    carica la stringa di input che hai in un arrary

    enumera l'array e controlla con isdigit se il carattere è numerico oppure no

    appena trovi un carattere che non risulta essere numerico, allora esci dall'enumerazione ed emetti il messaggio di errore 

    Ti bastano 3 righe di codice con una variabile bool per fare il controllo  


    Se vuoi testare e validare un carattere alla volta, l'ultimo carattere inserito, allora non ti serve valutare la stringa di input per intera e fai il test del carattere con isdigit e magari in ogni caso che non sia uno spazio

    ;-

    Ho risolto cosi per ora,mano lo miglioro

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>
    # define True 1
    # define False 0
    #define N 50 //Definisco la dimensione dell'array
    //Programma che verifica l'inserimento di un numero o di un carattere
    
    int main()
    {
        char vett[N];
        int i, lunghezza, numeri,Flag;
      
    
        printf("Inserire stringa: ");
        scanf("%s", vett);
    
        lungghezza=strlen(vett);
        printf("\nLa stringa e' lunga %d caratteri.", lunghezza);
    
        for(i=0; i<lunghezza; i++)
        {
            if(isdigit(vett[i])!=0)
            {
            
               Flag=True;
            }
    
          
            {
              else if(isalpha(vett[i])!=0);
                  
                    Flag=False;
            }
    
        }
          if(Flag==False) printf(" %s \n", "Hai inserito una Lettera");
            else  printf(" %s \n ","Hai inserito una Cifra");
    
    
        return 0;
    }
Devi accedere o registrarti per scrivere nel forum
24 risposte