PDA

Visualizza la versione completa : [C] Programma prosegue senza attendere la pressione del tasto


gaten
18-05-2012, 20:17
Ragazzi mi succede una cosa strana:



#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include "liste.h"

int main(int argc, char *argv[])
{
char choise;
char cont;
NODO *L;
L = NULL;
int element;

do
{
printf("GESTIONE DI UNA LISTA:\n\n");
printf("[1]. Inserisci un elemento nella lista:\n");
printf("[2]. Stampa la lista:\n");
printf("[3]. Cancella elemento dalla lista(estrazione in testa)\n");

choise = getchar();

switch(choise)
{
case '1':
// Inserisco un elemento nella lista.
printf("Inserisci l'elemento(int) da inserire:\n");
scanf("%d", &element);
L=AddToList(L, element);
break;

case '2':
// Stampo la lista.
StampList(NULL);
break;

case '3':
;
break;
}

printf("Vuoi continuare ? (s/n)\n");
cont = getchar();

} while ( cont == 's' );

system("\nPAUSE");
}


Praticamente quando effettuo una scelta, esempio 1, mi f inserire l'elemento richiama la funzione e poi dopo e come se non considerasse il while, cio mi esce scritto:

Vuoi continuare ? (s/n)
Clicca un tasto per continuare . . .

Cio senza contare cont = getchar();

Come mai?

Grazie anticipatamente

oregon
18-05-2012, 20:47
E' la solita questione del buffer "sporco" a causa della scanf.

Ne abbiamo parlato centinaia di volte nel forum (e probabilmente anche con te).


P.S. Ma che c'entra la system che hai indicato nel titolo???

Who am I
18-05-2012, 22:31
Al posto della system("pause") potresti mettere una semplice getchar() di cui non prendi il valore:



printf("Programma terminato, premere invio per continuare\n");
getchar();


Invece di fare una chiamata di sistema che tra l' altro dispendiosa.

Comunque penso che si dovrebbe mettere un thread permanente che spiega come risolvere questo problema del buffer, una cosa controintuitiva per il programmatore alle prime armi.

oregon
18-05-2012, 22:42
Originariamente inviato da Who am I
Comunque penso che si dovrebbe mettere un thread permanente che spiega come risolvere questo problema del buffer, una cosa controintuitiva per il programmatore alle prime armi.

Concordo pienamente.

Loading