RAGAZZI GENTILMENTE UNA MANO

di il
13 risposte

RAGAZZI GENTILMENTE UNA MANO

RAGAZZI SINCERAMENTE NON TROVO L'ERRORE POTETE DARE UN'OCCHIATA

#include <stdio.h>

int main()
{
int a , b ;
char oper;
int somma ;
float sottr ;
printf("inserire il primo numero");
scanf("%d",&a);
printf("inserire il secondo numero");
scanf("%d",&b);
printf("inserire l'operazione tra + - ");
scanf("%c",&oper);

switch (oper)
{
case '+': somma = a + b;
printf ("%d",somma);
break;

case '-': sottr = a - b;
printf("%f",sottr);
break;

}

getchar();getchar();
}

APPENA ESEGUO DOPO AVER INSERITO PRIMO NUMERO SECONDO NUMERO E OPERAZIONE NON SUCCEDE + NIENTE VI PREGO AIUTATEMI.....USO DEV C++

13 Risposte

  • Re: RAGAZZI GENTILMENTE UNA MANO

    Non c'è niente che non va. Il programma si chiude non appena metti i numeri.
    
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
    	int a , b ;
    	char oper;
    	int somma ;
    	float sottr ;
    	printf("inserire il primo numero");
    	scanf("%d",&a);
    	printf("inserire il secondo numero");
    	scanf("%d",&b);
    	printf("inserire l'operazione tra + - ");
    	fflush(stdin);
    	scanf("%c",&oper);
    
    	switch (oper)
    	{
    	case '+': somma = a + b;
    		printf ("%d",somma);
    		break;
    
    	case '-': sottr = a - b;
    		printf("%f",sottr);
    		break;
    
    	}
    
    	system("pause");
    }
    
  • Re: RAGAZZI GENTILMENTE UNA MANO

    Precisamente dopo aver messo l'operazione ... nn hai idea di cosa può essere?
  • Re: RAGAZZI GENTILMENTE UNA MANO

    Prova il mio codice e vedrai che non succederà. su stdin son rimasti ancora i dati di input e i successivo scanf riceve il '\n'. dopo aver fatto il flush del stdin tutto funziona. Attenzione però non capisco perche hai usato un float per la sottrazione, bastava un int.
  • Re: RAGAZZI GENTILMENTE UNA MANO

    Si scusa e puramente una cavolata il fatto del floa.....però vlevo domandarti fflush(stdin); non avendolo mai usato a cosa serve....???
  • Re: RAGAZZI GENTILMENTE UNA MANO

    La funzione fflush() serve per pulire il buffer associato ad un flusso di dati da eventuali caratteri residui da operazioni precedenti. Il nome simbolico stdin indica lo standard input cioè la tastiera. In definitiva si svuota la zona di memoria associata alla tastiera in modo da preparla per i nuovi dati in ingresso.
  • Re: RAGAZZI GENTILMENTE UNA MANO

    Ops...
    http://it.wikipedia.org/wiki/Fflush#Not
  • Re: RAGAZZI GENTILMENTE UNA MANO

    Ops....msdn

    The fflush function flushes a stream. If the file associated with stream is open for output, fflush writes to that file the contents of the buffer associated with the stream. If the stream is open for input, fflush clears the contents of the buffer. fflush negates the effect of any prior call to ungetc against stream. Also, fflush(NULL) flushes all streams opened for output. The stream remains open after the call. fflush has no effect on an unbuffered stream.

  • Re: RAGAZZI GENTILMENTE UNA MANO

    Reops standard cpp

    www.cplusplus.com/reference/clibrary/cstdio/fflus

    In files open for update (i.e., open for both reading and writting), the stream shall be flushed after an output operation before performing an input operation. This can be done either by repositioning (fseek, fsetpos, rewind) or by calling explicitly fflush.
  • Re: RAGAZZI GENTILMENTE UNA MANO

    Ti assicuro che è errato! informati meglio!

    ~Max
  • Re: RAGAZZI GENTILMENTE UNA MANO

    Due delle maggiori reference di programmazione sono errati se il file è aperto per l'update? Mi informo.
  • Re: RAGAZZI GENTILMENTE UNA MANO

    Vorrei chiarire cosa è il buffer di tastiera e come funziona.

    Quando utilizziamo una scanf per acquisire un input, i caratteri immessi vengono inseriti in un'area di memoria temporanea (buffer di tastiera) la quale è controllata dal sistema operativo. Quest'area di memoria è necessaria per memorizzare sequenze di caratteri e la sua dimensione può esser cambiata a nostro piacimento.

    Il buffer viene 'travasato' nella funzione di input in due casi: con [INVIO] oppure a riempimento della memoria di transito. Durante questa fase, viene letto e/o convertito un carattere alla volta fino al carattere di \n "a capo" . Se l'operazione ha buon fine viene eliminata una porzione del buffer altrimenti no.
    Il carattere \n rimane sempre nel buffer "intenzionalmente".

    In alcuni casi, è necessario svuotare il buffer prima di effetture input:
    -scanf singolo char
    -altre funzioni input differenti (...)
    Questo può essere fatto in "ANSI C" anteponendo uno spazio davanti al segno di percentuale della scanf oppure cambiare le politiche del buffer con setbuf().
    L'utilizzo di fflush (stdin) lo sconsiglio in quanto opera sullo stream di output e non di input e non funziona su tutti i sistemi.

    Sperando sia servito a capire qualcosa in più...

    ~Max~
  • Re: RAGAZZI GENTILMENTE UNA MANO

    Grazie mille ragazzi....Comunque vorrei porvi un'altra pikkola problematica come impostereste voi un programma che debba riconoscere dato una lettere se maiuscolo o minuscolo?
  • Re: RAGAZZI GENTILMENTE UNA MANO

    http://www.cplusplus.com/reference/clibrary/cctype/isupper/
Devi accedere o registrarti per scrivere nel forum
13 risposte