Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 39

Discussione: [C] problemi di input

  1. #1

    problemi di input

    salve a tutti,
    ho un problema con l'input in c vorrei che quando un utente utilizzasse il programma potesse inserire solo numeri e non lettere come potrei fare ? grazie
    questo è il codice sorgete a cui devo applicare la restrizione in input:
    codice:
    #include<stdio.h>
    #include <stdlib.h>
    #define SIZE 4
    int main (int argc,const char*argv[]){
        float array[SIZE];
        int x;
        float q;
        float m;
        printf("inserisci coef. angolare\n");
        scanf("%f",&m);
        printf("inserisci q\n");
        scanf("%f",&q);
        printf("%s%13s\n","Elemento","Valore");
        for(x=0;x<=SIZE-1;x++){
            array[x]=m*x+q;
        }
        for(x=0;x<=SIZE-1;x++){
            printf("%8d%13.2f\n",x,array[x]);
        }
    
        return 0;
        system("pause");
    }

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Stai parlando della riga di comando?

    Ti conviene fargli inserire l'input normalmente e poi controllare che sia un valore numerico e nel caso non lo sia rifarglielo inserire: molto più semplice...

    Se lo 0 non è un valore accettabile può bastare un atoi...

    Puoi anche leggere un intero con scanf e controllare i valori di ritorno della funzione...
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    scanf
    On success, the function returns the number of items of the argument list successfully filled. This count can match the expected number of items or be less (even zero) due to a matching failure, a reading error, or the reach of the end-of-file.

    If a reading error happens or the end-of-file is reached while reading, the proper indicator is set (feof or ferror). And, if either happens before any data could be successfully read, EOF is returned.

    If an encoding error happens interpreting wide characters, the function sets errno to EILSEQ.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  4. #4
    Il problema che lo zero è un valore accettabile e che deve distinguere valori decinali da lettere e non so proprio come fare...

  5. #5
    Che funzione mi consigliate di usare per evitare che si inseriscano le lettere atoi potrebbe funzionare..?

  6. #6
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    atoi è per gli interi...
    Ti ho già detto di dare un'occhiata a scanf e ai valori di ritorno!
    Ti ho anche linkato la documentazione!
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  7. #7

    Moderazione

    Ti ricordo che il linguaggio di riferimento va indicato nel titolo e il codice va inserito tra tag [code] ... [/code]; ora ho sistemato io, in futuro ricordatene (e intanto dai un'occhiata al regolamento).
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Ciao, puoi utilizzare isdigit. Leggi qui.

  9. #9
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    Io avrei pensato di fare una funzione con getch() e atof()

    sempre che si possa usare getch() che è una funzione non standard .


    ti posto un esempio :



    codice:
    #include<stdio.h>
    #include <stdlib.h>
    #define SIZE 4
    float inputfloat();
    
    int main (int argc,const char*argv[]){
        float array[SIZE];
        int x;
        float q;
        float m;
        printf("inserisci coef. angolare\n");
        m=inputfloat();
        printf("inserisci q\n");
        q=inputfloat();
        printf("%s%13s\n","Elemento","Valore");
        for(x=0;x<=SIZE-1;x++){
            array[x]=m*x+q;
        }
        for(x=0;x<=SIZE-1;x++){
            printf("%8d%13.2f\n",x,array[x]);
        }
    
       
        system("pause");
    }
    
    
    float inputfloat()
    {
        char temp;
        char numero[20];
        char punto =0;
        int i=0;
        
        do
        {
              temp=getch();
            
            
              if ((temp>=48 && temp<=57)||temp==46)//se il carattere è un numero o un punto .
              {
                  if(temp==46 && punto==0) // se è .
                      {
                          punto=1;
                          putchar(temp);
                          numero[i++]=temp;
                      
                       }
                  
                   if(temp!=46)
                      {
                          putchar(temp);
                          numero[i++]=temp;
                      
                      
                       }
                  
                   
                  
                  }
            
            
            }while(temp!=13);
        
        numero[i]=0;
        printf("\n");
        return (float) atof(numero);
        }
    Tecnologia

  10. #10
    Il problema è che getch mi da errore se viene utilizzato e non ho capito come potrei utilizzare isdigit o scanf anche se ho letto le spiegazioni non mi è chiaro come utilizzarle all'interno del mio codice..grazie a tutti per l'aiuto

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.