Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente bannato
    Registrato dal
    Nov 2004
    Messaggi
    202

    [C] scanf come accettare solo numeri

    Volevo sapere come poter fare un controllo sui dati ricevuti tramite uno scanf... per la precisione il controllo dovrebbe essere del tipo

    scanf(..)
    Se il dato è numerico allora vai avanti
    altrimenti riscrivi la scritta di inserire un numero.

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    Riscrivo quello fatto dall'altra parte. Questa funzione IMPEDISCE all'utente di digitare cose che tu non vuoi.
    codice:
    #include <conio.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    void GetString(int lenght, char *buffer, bool allowedchars[256])
    {
        int i;
        for(i = 0; i < lenght;)
        {
            int a = getch();
            if (allowedchars[a]) 
            {
                buffer[i] = a;
                putch(a);
                i++;
            }  
        }
        buffer[i] = '\0';
    }
    
    int main()
    {
        bool OkChars[256];
        for (int i = 0; i < 256; i++) OkChars[i] = false;
        for (int i = 65; i < 91; i++) OkChars[i] = OkChars[i+32] = true;
        char str[4];
        GetString(3, str, OkChars);
        printf("\n%s", str);
        getch();
    }
    Si possono aggiungere anche controlli di formato, volendo. Comunque quello che vuoi fare tu si può fare anche in un altro modo:
    codice:
    bool IsNumeric(char *string)
    {
        for(int i = 0; string[i] != '\0'; i++)
        {
            if ((string[i] < '0' || string[i] > '9') && string[i] != '.') return false;
        }
        return true;
    }

  3. #3
    Utente bannato
    Registrato dal
    Nov 2004
    Messaggi
    202
    c'è una soluzione senza array ?

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    Si potrebbero usare le funzioni di scanning di stringa ... ma temo sia un macello ... comunque:
    codice:
    #include <string.h>
    bool IsNumeric(char *string)
    {
        for (int i = 1; i < 256; i++)
        {
            if (i == '.') i++;
            if (i == '0') i = '9' + 1;
            if (strchr(string, i)) return false;
        }
        return true;
    }
    Senza array.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.