Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156

    [C] Identificare tipo dato di ingresso

    Ciao a tutti,
    ho dei dubbi su come riuscire a far stampare o leggere valori senza sapere a priori di quale tipo siano .
    Il programma seguente, ha lo scopo di scrivere il numero di " 1" presenti nella colonna del totocalcio e di seguito anche il numero di "2" e di "X".
    Un esempio :
    codice:
    #include<stdio.h>
    #include<stdlib.h>
    main()
    {
         
          int contatore, somma1, somma2, sommax, sommaerr;
          ? valore /* come va dichiarata la variabile "valore"? */
          somma1=0;
          somma2=0;
          sommax=0;
          sommaerr=0;
          contatore=0;
          scanf("%?", valore); /* dal momento che il valore può essere 1,2 o X
          che tipo va inserito nella stringa di controllo?*/
          while(contatore<=13)
          
          {
                      
                      if(valore==1)
                      {
                                   somma1=somma1+1;
                                   contatore=contatore+1;                  
                                   scanf("%c", valore);
                      }   
                      if(valore==2)
                      {
                                   somma2=somma2+1;
                                   contatore=contatore+1;
                                   scanf("%c", valore);
                      }   
                      if(valore==x)
                      {
                                   sommax=sommax+1;
                                   contatore=contatore+1;
                                   scanf("%c", valore);
                      } 
                      if(valore!=1 && valore!=2 && valore!=x)
                      {
                                   printf("Errore, devi digitare 1,2 o X.\n");
                                   sommaerr=sommaerr+1;
                                   scanf("%c", valore);
                      }
          }
          
          printf("La somme di 1,2 e X sono rispettivamente %d%d%d%d", somma1,somma2,sommax,sommaerr);
          system("pause");
          }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Usa un char e non dimenticare di svuotare il buffer di input subito dopo la scanf.

    P.S. Questa sezione del forum non è per il C ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156
    Mi potresti fare un esempio per favore? Magari applicandolo direttamente al codice che ho postato io...

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Che esempio? Usa un char ... prova ...

    Guarda questo

    http://forum.html.it/forum/showthrea...readid=1482474

    e per i confronti considera che devi scrivere

    if(valore=='1')

    con i singoli apici.

    Tieni presente che 'x' e 'X' sono diversi ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156
    Ho modificato il codice come segue ma continua a darmi problemi ( qualsiasi valore venga digitato lo riconosce a prescindere come diverso sia da 1 che da 2 e x)? Dov'è l'errore?
    ps: quindi per dichiarare una variabile che potrebbe contenere sia valori numerici e lettere dell'alfabeto va bene il char?







    codice:
     #include<stdio.h>
    #include<stdlib.h>
    main()
    {
         
          int contatore, somma1, somma2, sommax, sommaerr;
          char valore; 
          somma1=0;
          somma2=0;
          sommax=0;
          sommaerr=0;
          contatore=0;
          scanf("%c", &valore); 
          while(contatore<=13)
          
          {
                      
                      if(valore=='1')
                      {
                                   somma1=somma1+1;
                                   contatore=contatore+1;                  
                                   scanf("%c", &valore);
                      }   
                      if(valore=='2')
                      {
                                   somma2=somma2+1;
                                   contatore=contatore+1;
                                   scanf("%c", &valore);
                      }   
                      if(valore=='x')
                      {
                                   sommax=sommax+1;
                                   contatore=contatore+1;
                                   scanf("%c", &valore);
                      } 
                      if(valore!='1' && valore!='2' && valore!='x')
                      {
                                   printf("Errore, devi digitare 1,2 o x.\n");
                                   sommaerr=sommaerr+1;
                                   scanf("%c", &valore);
                      }
          }
          
          printf("La somme di 1,2 e X sono rispettivamente %d%d%d%d", somma1,somma2,sommax,sommaerr);
          system("pause");
          }

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Come ti avevo già detto (ma non hai neanche aperto il link ...) devi inserire il codice per svuotare il buffer di input.

    Inoltre

    - la scanf deve essere all'interno del ciclo

    - il ciclo deve essere <13

    - devi eliminare tutte le altre scanf

    Quindi (ti riporto solo parte del codice corretto ...)

    codice:
          contatore=0;
          while(contatore<13)
          {
                scanf("%c", &valore); 
    	    while (getchar() != '\n');
    
                if(valore=='1')
                {
                       somma1=somma1+1;
                       contatore=contatore+1;                  
                }   
    
    ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156
    Avevo letto il link ma non ho ancora affrontato il concetto di buffer e la funzione getchar per quello ho tralasciato ( pensavo che la cosa non fosse fondamentale al funzionamento del programma). In ogni caso grazie per l'interessamento, ho capito l'errore del <=13 ma cosa comporta la scanf fuori dal ciclo le altre all'interno di ogni if?

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Che senso ha avere tutte quelle scanf?

    Se devi prendere da tastiera 13 segni, metti una sola scanf ripetuta 13 volte ... no?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156
    Si, sono d'accordo che sia sconveniente, ma a rigor di logica dovrebbe funzionare lo stesso no?

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da slashino
    Si, sono d'accordo che sia sconveniente, ma a rigor di logica dovrebbe funzionare lo stesso no?
    Non ti consiglio di adottare del codice sbagliato logicamente solo perché funziona ugualmente ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.