Ir ao conteúdo

Posts recomendados

Postado

Alguem consegue me ajudar a resolver esse problema? É um programa que separa as casas dos numeros( milhar, centena, dezena, etc), porém estava tendo um problema: quando a pessoa digitava uma letra ao invés de um numero o programa bugava totalmente. então tentei arrumar isso usando a variavel valor, o problema é que agora se alguem digita uma letra ele a mensagem de erro "printf("Valor Invalido");" aparece e o programa nao volta ao inicio como eu queria que acontecesse, alguem pode me ajduar a resolver isso?

int main ()
{
	int opc = 1;
	int valor;
	
	while (opc != 2) 
	{
		system("cls");
		printf("Separador de Unidades:\n\n");
		printf("Escolha um numero de 1 a 9999: ");
		valor = scanf("%d", &num);
		    
		if(valor==0)
		{
		    system("cls");
		    printf("Valor Invalido!");-
		}
		
		else
		{
		    if (num > 9999 || num < 0)
	        {
		        system("cls");
		        printf("Valor invalido");		 
	        }
	    
	        else
	        {
		        rest(num); 
	        }
	
	        system("pause"); 

	        system("cls"); 
	
	        printf("1.Voltar ao inicio\n2.Sair\n");
	        scanf("%d", &opc); 
	    }
	}
	
	return 0;	
}
  • Curtir 1
Postado

Tenta usar continue para retornar ao inicio do loop.

Ex:

		//dentro do while...
		system("cls");
		fflush(stdin);
		
		printf("Separador de Unidades:\n\n");
		printf("Escolha um numero de 1 a 9999: ");
		valor = scanf("%d", &num);
		    
		if(valor==0)
		{
		    printf("\nValor Invalido!\n");
		    system("pause");
		    continue;
		}
		//etc...

 

  • Curtir 3
Postado

Sinceramente eu não sei te explicar a causa do problema, mas quando vocÊ digita uma letra ele volta no topo do while e ignora o scanf, fica nesse loop infinito.

Consegui fazer funcionar adicionando um 

Citação

 getchar();

depois do scanf. Funciona com

Citação

fflush(stdin);

também. Ficaria assim

Citação

valor = scanf("%d", &num);
getchar();

 

  • Curtir 2
Postado

@Igor Augusto T Tibiriçá     Se você quer  que o programa aceite apenas numero 

use o comando while do jeito que coloquei no seu código,      veja como ficou:

#include <iostream>
#include <stdio.h>
#include <ctype.h>
#include <conio.h>
using namespace std;
int main ()
{
	int opc = 1;
	while (opc != 2)
	{
		system("cls");
		printf("Separador de Unidades:\n\n");
		printf("Escolha um numero de 1 a 9999: ");
		int valor = 0;

        while(!scanf ("%d", &valor))
        {
          while(getchar() != '\n');
          printf("Entrada invalida.\n\n");
          printf("Escolha um numero de 1 a 9999: ");
        }

		if (valor > 9999 || valor < 0)
	    {
		    system("cls");
		    printf("Valor invalido\n");
        }
        else
	    {
		    //rest(num);
		    printf("fazer a separacao das dezenas\n\n");
            nup = 0;
		    if(valor > 999){
                nup = int(valor/1000);valor = valor-nup*1000;
                printf("%d",nup);printf(" milhar\n");
            }
            nup = 0;
            if(valor > 99){
                nup = int(valor/100);valor = valor-nup*100;
                printf("%d",nup);printf(" centenas\n");
            }
            nup = 0;
            if(valor > 9){
                nup = int(valor/10);valor = valor-nup*10;
                printf("%d",nup);printf(" dezenas\n");
            }
            nup = 0;
            if(valor > 0){
                nup = valor;
                printf("%d",nup);printf(" unidades\n\n");
            }
	    }
	    system("pause");
	    system("cls");
	    printf("  1 - Voltar ao inicio\n  2 - Sair\n");
	    scanf("%d", &opc);
	}
	return 0;
}

 

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!