RAGAZZI GENTILMENTE UNA MANO

di Anonimizzato8175 il
13 risposte
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

  • 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");
    }
    
  • Precisamente dopo aver messo l'operazione ... nn hai idea di cosa può essere?
  • 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.
  • Si scusa e puramente una cavolata il fatto del floa.....però vlevo domandarti fflush(stdin); non avendolo mai usato a cosa serve....???
  • 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.
  • 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.

  • 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.
  • Ti assicuro che è errato! informati meglio!

    ~Max
  • Due delle maggiori reference di programmazione sono errati se il file è aperto per l'update? Mi informo.
  • 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~
  • 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?
Devi accedere o registrarti per scrivere nel forum
13 risposte