PROBLEMA Problema con C!

Pubblicità
A meno che io non abbia le traveggole il frammento di codice da te postato mi sembra ok, per questo volevo vedere tutto il codice. Comunque l'errore è che compare la scritta "press any key.."?
 
Mmmm, in un certo senso sì.
Ecco dovrei fare un giochino molto stupido dove alla fine ti viene detto quanto sei intelligente da 1 a 10.
Il codice è questo, ma non creda serva granchè...

#include<stdio.h>

main()
{
//Intro

printf("TEST DELL'INTELLIGENZA\n\n");
printf("Ti sei mai chiesto quanto tu sia realmente intelligente?\n");
printf("Verifichiamolo subito!\n\n");

system("pause");
printf("\n\n");

printf("Ti daro' 10 domande a cui dovrai rispondere\n\n\n");

system("pause");
printf("\n\n");

//Prima Domanda

//2-->10
//4-->20
//6-->30
//10-->?(50=50x10)

int a;

printf("Completa la sequenza\n\n");

printf("2-->10\n");
printf("4-->20\n");
printf("6-->30\n");
printf("10-->?\n\n");

printf("10--> ");
scanf("%d",&a);

system("pause");
printf("\n\n");

//Seconda Domanda

int b;

printf("Completa la sequenza\n\n");

printf("C,F,I,N,Q,...\n");

printf(" ");
scanf("%d",&b);

system("pause");
printf("\n\n");

//Terza Domanda

printf("Completa la sequenza\n\n");

printf("30 28 26 ?\n");
printf("| | | |\n");
printf("| | | |\n");
printf("| | | |\n");
printf("25 23 21 ??\n");

int c1;

printf("?= ");
scanf("%d",&c1);

}
 
Ho capito qual è il problema: non ti fa digitare il numero perché quando si arriva alla scanf, prima che tu possa premere un tasto, questa riceve in input l'ultimo carattere digitato prima, e ancora presente nel buffer di input (stdin). Per risolvere ci sono (almeno) due modi: il più immediato è far precedere la scanf da una getchar(), in modo che questa intercetti l'ultimo carattere ancora presente nel buffer non interferendo con il seguito del programma (potresti usare anche una scanf con una variabile creata ad hoc, ma è meno pratico). Il secondo metodo, che è anche il migliore, e che ti consiglio, è di eliminare tutte quelle system("pause"), anche perché si tratta di un'istruzione che non andrebbe mai usata: funziona solo su windows (non è portabile) ed è dispendiosa perché esegue una chiamata al sistema operativo, il che costa in termini di tempo, perciò è deprecata.
 
Ho capito qual è il problema: non ti fa digitare il numero perché quando si arriva alla scanf, prima che tu possa premere un tasto, questa riceve in input l'ultimo carattere digitato prima, e ancora presente nel buffer di input (stdin). Per risolvere ci sono (almeno) due modi: il più immediato è far precedere la scanf da una getchar(), in modo che questa intercetti l'ultimo carattere ancora presente nel buffer non interferendo con il seguito del programma (potresti usare anche una scanf con una variabile creata ad hoc, ma è meno pratico). Il secondo metodo, che è anche il migliore, e che ti consiglio, è di eliminare tutte quelle system("pause"), anche perché si tratta di un'istruzione che non andrebbe mai usata: funziona solo su windows (non è portabile) ed è dispendiosa perché esegue una chiamata al sistema operativo, il che costa in termini di tempo, perciò è deprecata.

Suppongo che potrsti usare anche fflush(stdin); sono un po' arrugginito con il C ma in teoria dovrebbe "pulire" il buffer, va messo prima della scanf e non dovresti avere problemi.
 
Pubblicità
Pubblicità
Indietro
Top