Codice in C, problema inserimento input

di il
3 risposte

Codice in C, problema inserimento input

Ciao a tutti!
Ho questo codice che mi converte un carattere in binario e che funziona perfettamente:
#include <stdio.h>

int main()
{
	char letter;
	int bin[8], i;
	
	printf("Immettere una lettera: ");
	scanf("%c", &letter);
   printf("\nLettera inserita: %c\n", letter);
	getchar();

	for(i = 0; i < 8; i++)
		bin[i] = ((letter >> i)&1);
	for(i = 0; i < 8; i++)
		printf("%d", bin[7-i]);
	printf("\n");
	
	return 0;
		
}
E quest'altro codice che consente all'utente di scegliere anche se effettuare una conversione da intero a binario:

Premetto che la parte della conversione da carattere a binario è esattamente la stessa al codice qui sopra, copiata ed incollata
#include <stdio.h>
#include <stdlib.h>

void menu();
void choose();
void int_bin();
void char_bin();

int main()
{
	menu();
	return 0;
}

void menu()
{
	printf("\n*** Convertitore ***\n\n");
	printf("(1) - Da intero binario\n(2) - Da char a binario\n\n");
	choose();
}

void choose()
{
	int scelta;
	scanf("%d", &scelta);
	switch(scelta)
	{	
		case 1:
			int_bin();
			break;
		case 2:
			char_bin();
			break;
	}
}
void int_bin()
{
	int i, bin[32];
	int n;
	int space = 0;

	printf("Immettere un numero: ");
	scanf("%d", &n);
	getchar();

	for(i=0;i<32;i++) 
	{
		bin[i]=((n>>i)&1);
	}
	for(i=0;i<32;i++) 
	{	
		space++;
		printf("%d",bin[31-i]);
		if((space == 8)|(space == 16)|(space == 24))
			printf(" ");
   	}

      	printf("\n");
}

void char_bin()
{
	char letter;
	int bin[8], i;
	int n;
	
	printf("Immettere una lettera: ");
	scanf("%c", &letter);
	printf("\nLettera inserita: %c\n", letter);
	getchar();

	for(i = 0; i < 8; i++)
		bin[i] = ((letter >> i)&1);
	for(i = 0; i < 8; i++)
		printf("%d", bin[7-i]);
	printf("\n");

	
}
Il problema è che nel secondo codice, nella funzione char_bin non mi fa inserire il carattere! Infatti come vedete, subito dopo lo vado a stampare ma in esecuzione non succede nulla. Com'è possibile? Ho semplicemente copiato i due codici!!

3 Risposte

  • Re: Codice in C, problema inserimento input

    Subito dopo la scanf della scelta inserisci la linea

    while(getchar()!='\n') ;

    per pulire il buffer di input
  • Re: Codice in C, problema inserimento input

    Funziona!! Grazie mille!
    Potresti spiegarmi gentilmente cosa fa precisamente "while(getchar()!='\n') ;" e in quale occasioni va utilizzata?
  • Re: Codice in C, problema inserimento input

    La scanf accetta il valore mentre il codice del tasto return resta nel buffer di input. Per evitare che la cosa influenzi il prossimo input allora si svuota il buffer con quel ciclo.
Devi accedere o registrarti per scrivere nel forum
3 risposte