Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [C]Programma calcolatrice

    Sono nuovo del linguaggio C e sto provando a fare un "semplice" programma calcolatrice:
    codice:
    /* programma calcolatrice */
    
    #include "stdio.h"
    
    main(){
    char x;
    int v1 ,v2;
    printf("Primo valore: ");
    scanf("%d", &v1);
    printf("Secondo valore: ");
    scanf("%d", &v2);	
    printf("Scegli l'operazione da effettuare: ");
    x = getchar();
    switch(x){
    
    	case '+': v1 = v1 + v2;
    	break;
    
    	case '-': v1 = v1 - v2;
    	break;
    
    	case '*': v1 = v1 * v2;
    	break;
    
    	case ':': v1 = v1 / v2;
    	break;
    
    	}
      
    printf("Risultato finale: %d\n",v1);
    }
    Il problema è che non mi da la possibilità di inserire l'operazione desiderata.
    Sono sicuro che c'è un errore banale, ma essendo nuovo del linguaggio non riesco a trovarlo.
    Qualcuno può aiutarmi?
    Grazie mille!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Niente da fare.
    Ho provato inserendo:
    codice:
    while((c = getchar()) != EOF && c != '\n');
    ma continua a saltarmi la selezione.
    Ho provato anche con:
    codice:
    scanf("%c",x);
    ma niente da fare.
    Altre idee?
    Grazie ancora.

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    56
    fflush
    ammazza sei un fulmine oregon
    codice:
    #include "stdio.h"
    
    main()
    {
    char x;
    float v1,v2,v3=0;
    printf("Primo valore: ");
    scanf("%f", &v1);
    getchar();
    fflush(stdin);
    
    printf("Secondo valore: ");
    scanf("%f", &v2);
    fflush(stdin);	
    printf("Scegli l'operazione da effettuare: ");
    scanf("%c",&x);
    
    fflush(stdin);
    
    switch(x)
       {
    	case '+': v3 = v1 + v2;
    	break;
    
    	case '-': v3 = v1 - v2;
    	break;
    
    	case '*': v3 = v1 * v2;
    	break;
    
    	case ':': v3 = v1 / v2;
    	break;
    
    	}
      
    printf("Risultato finale: %f\n",v3);
    fflush(stdin);
    getchar();
    return 0;
    }
    scusa ho cambiato qualcosa ma la quetio è come dice Oregon fflush pulire da invii

  5. #5
    Originariamente inviato da MaxPower78
    Niente da fare.
    Ho provato inserendo:
    codice:
    while((c = getchar()) != EOF && c != '\n');
    ma continua a saltarmi la selezione.
    Ho provato anche con:
    codice:
    scanf("%c",x);
    ma niente da fare.
    Altre idee?
    Grazie ancora.
    Fai quel while dopo ogni input:

    codice:
    #include "stdio.h"
    
    void clean() 
    {     
        char c; 
        while((c = getchar()) != EOF && c != '\n'); 
    }
    
    int main(){
    	char x;
    	int v1 ,v2;
    	printf("Primo valore: ");
    	scanf("%d", &v1);
    	clean();
    
    	printf("Secondo valore: ");
    	scanf("%d", &v2);	
    	clean();
    
    	printf("Scegli l'operazione da effettuare: ");
    	x = getchar();
    	clean();
    	
    	switch(x)
    	{
    		case '+': v1 = v1 + v2;
    		break;
    
    		case '-': v1 = v1 - v2;
    		break;
    
    		case '*': v1 = v1 * v2;
    		break;
    
    		case ':': v1 = v1 / v2;
    		break;
    	}
      
    	printf("Risultato finale: %d\n",v1);
    }

  6. #6
    Originariamente inviato da jc74
    fflush
    come ho scritto nell'altro thread, non dovreste mai utilizzare fflush:


    int fflush ( FILE * stream );

    If the given stream was open for writing and the last i/o operation was an output operation, any unwritten data in the output buffer is written to the file.
    If it was open for reading and the last operation was an input operation, the behavior depends on the specific library implementation. In some implementations this causes the input buffer to be cleared, but this is not standard behavior.


    fonte: http://www.cplusplus.com/reference/c...cstdio/fflush/

  7. #7
    Innanzitutto grazie a tutti.
    Alla fine ho utilizzato il codice di antotan.
    A questo punto abuso della vostra disponibilità.
    Perchè è necessario invocare questo metodo clean()?
    Esattamente cosa fa?
    Grazie 1000!

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    clean non è un metodo ma una semplice funzione che svuota il buffer della tastiera.

    In questo modo, la successiva chiamata di una funzione di input da tastiera non è influenzata da ciò che si è pressato prima (il tasto invio, in particolare)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Mi scuso per l'imprecisione e ringrazio ancora 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.