Menu básico recebe caractere e da pau [RESOLVIDO]

1. Menu básico recebe caractere e da pau [RESOLVIDO]

vinicius
vinicius_souza

(usa Ubuntu)

Enviado em 30/01/2014 - 16:30h

Pessoal boa tarde,
estou tentando fazer um menu básico em C porém as opções são numeros e se o usuário digitar um caractere o programa não funciona.

//Para compilar use programa.c -o programa
#include"stdio.h"
#include"stdlib.h"
int main (){
int cod, op, v;
char op2[50];
printf("\e[H\e[2J");//limpa a tela
printf("Informe o seu cod >");
scanf("%d",&cod);
while(op < 1 || op > 3 || v == 1){//loop para a opcao digitada seja valida
printf("\e[H\e[2J");//limpa a tela
printf(" +--------------------------------+\n");
printf(" | Escolha uma das opcoes abaixo |\n");
printf(" +--------------------------------+\n");
printf(" | 1 - Venda com pedido |\n");
printf(" | 2 - Venda sem pedido |\n");
printf(" | 3 - Trocar de usuario |\n");
printf(" | 4 - Abandona o menu |\n");
printf(" +--------------------------------+\n");
printf("\n\n Escolha uma opcao > ");
scanf("%d",&op);
if(op==1){
op = 0;
sprintf(op2,"cd home/;ECF %d cp015", cod);
system(op2);
v = 1;
}else if(op == 2){
op = 0;
sprintf(op2,"cd home;ECF %d cp15", cod);
system(op2);
v = 1;
}else if(op == 3){
op = 0;
printf("\e[H\e[2J");//limpa a tela
printf("Informe o seu cod >");
scanf("%d",&cod);
v = 1;
}else if(op == 4){ return 0;
}else{
v = 1;
}
}
return 0;
}

sei que para resolver esse problema eu tenho que colocar a variavel op como char porém não estou conseguindo testa-la depois com o strcmp.
como devo fazer?


  


2. MELHOR RESPOSTA

euteste da silva
foxbit3r

(usa Solaris)

Enviado em 30/01/2014 - 17:29h

Já tentou isso?



char op

scanf("%c",&op);
if(op=='1'){
....
}else if(op == '2'){
....


3. Re: Menu básico recebe caractere e da pau [RESOLVIDO]

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 30/01/2014 - 17:38h

Você pode testar o tamanho em bits da variável:

int = 4;
char = 1;

Faça:
[code]
if(sizeof(var) == 4){
continua o código
else{
vai para o iníco do código
}

Coloca tudo dentro de um laço while.


4. Re: Menu básico recebe caractere e da pau [RESOLVIDO]

vinicius
vinicius_souza

(usa Ubuntu)

Enviado em 31/01/2014 - 12:15h

rei_astro escreveu:

Você pode testar o tamanho em bits da variável:

int = 4;
char = 1;

Faça:

if(sizeof(var) == 4){
continua o código
else{
vai para o iníco do código
}

Coloca tudo dentro de um laço while.


rei_astro,
Para testar o que você me disse eu fiz esse cód mas não funcionou.
[code]
#include <stdio.h>
int main(){
int var,op;
printf("Escreva um caractere...");
scanf("%d",&var);
op = sizeof(var);
printf("%d",op);
}

obs.: Eu pedi para imprimir apenas para eu testar se ele ia gravar 1 ou 4.


5. Re: Menu básico recebe caractere e da pau [RESOLVIDO]

vinicius
vinicius_souza

(usa Ubuntu)

Enviado em 31/01/2014 - 12:19h

foxbit3r escreveu:

Já tentou isso?



char op

scanf("%c",&op);
if(op=='1'){
....
}else if(op == '2'){
....


Obrigado isso resolveu o meu problema, eu até já tinha feito assim antes mas provavelmente eu gravei com um char e no scanf com int, ai não passou,m as agora tá ok obrigado pela ajuda de todos.
Att:Vinícius


6. Re: Menu básico recebe caractere e da pau [RESOLVIDO]

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 31/01/2014 - 12:26h

Então use char mesmo. Os números podem ser char também. Outra coisa, seria melhor utilizar o laço do while(). Ex.:


//estrutura condicional: swhitch
//estrutura de repeticao: do..while
//funcao

#include <stdio.h> //biblioteca basica de entrada e saida
#include <stdlib.h> //biblioteca basica

//funcoes

void cadastroCliente(){
system("cls");
printf("Cadastro de clientes.");
getchar();
}

void consultaCliente(){
system("cls");
printf("Consulta de clientes.");
getchar();
}

void excluirCliente(){
system("cls");
printf("Excluir clientes.");
getchar();
}

void venda(){
system("cls");
printf("Vendas.");
getchar();
}

main(){ //funcao principal e obrigatoria

char continua, op;

do{
system("cls"); //limpa a tela
printf("\nEscolha a opcao:\n");
printf("0 - Cadastro\n");
printf("1 - Consulta\n");
printf("2 - Exclusao\n");
printf("3 - Vendas\n\n");
printf(">>> ");
scanf("%s",&op); //le a opcao
fflush(stdin);
switch(op){ //escolhe a opcao
case '0':
cadastroCliente();
break;
case '1':
consultaCliente();
break;
case '2':
excluirCliente();
break;
case '3':
venda();
break;
default : //para opcao inexistente
printf("Opcao inixistente!!!\n");
break;
}
do{
system("cls");
printf("\n\nDeseja continuar? s ou n\n\n"); //controla as repeticoes do laco
printf(">>> ");
scanf("%c",&continua);
fflush(stdin);
}while(continua != 's' && continua != 'n'); //o controle de repeticao vai se repetir ate digitar uma opcao valida
}while(continua=='s'); //se a opcao for 's' o programa se encerra.
system("cls");
printf("OBRIGADO PELA PREFERENCIA!!!\n\n");
getchar();
}


Observe que tem um laço dentro do outro e tem o default para as opções que não estejam disponíveis.

Usando swicth case é melhor do que if's aninhados.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts