Ir ao conteúdo
  • Cadastre-se

C problema para armazenar char


James_Mulder

Posts recomendados

Qual a forma de armazenar esse tipo de char? com scanf já tentei e n funciona
  
  

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int main()
{
    int i, n, tab=0;
    char op;
    printf("n: ");
    scanf("%d", &n);
    printf("operacao '*' para multiplicar,  '+' para somar");
    gets(op);
    if(op == '*'){
	for(i=1; i<=10; i++){
    	tab++;
    	printf("\n%d", n*tab);
	}}}

 

Link para o comentário
Compartilhar em outros sites

Provavelmente acontece isso por causa do "ENTER" que você para inserir o número. Tenta isso:

printf("n: ");
scanf("%d", &n);
getchar();//se livra do ENTER
printf("operacao '*' para multiplicar,  '+' para somar");
op = getchar();

De modo semelhante:

printf("n: ");
scanf("%d%*%c", &n);//*%c faz o scanf ignorar o ENTER
printf("operacao '*' para multiplicar,  '+' para somar");
op = getchar();

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

É o típico problema de ficar sobrando um '\n' na entrada padrão (stdin) depois do scanf ler a parte relevante para ele. Veja essa explicação que dei em outro tópico:

 

Em 18/06/2019 às 19:59, isrnick disse:

Toda vez que você digita algo no terminal (no caso do Windows seria o terminal cmd.exe), como por exemplo "123" e em seguida aperta Enter, é adicionado um caractere nova linha '\n' ao final da sequência de caracteres digitado quando você apertou Enter.

 

Então nesse nosso exemplo a string digitada de fato seria essa "123\n", que contém 4 caracteres não nulos '1', '2', '3', '\n'.

 

Nessa caso um scanf usando especificador %d pegaria os caracteres digitados que são relevantes para ele, os números 123, mas fica sobrando na stdin aquilo que ele não usou, nesse caso o '\n'.

 

Agora, se colocar um getchar logo em seguida terá o problema de que ele vai capturar esse "\n" que ficou sobrando, ao invés de esperar que o usuário digite algo novo.

 

Por isso precisamos limpar a stdin após o scanf e antes do fgets.

 

Uma solução parcial seria colocar um getchar() na linha logo após o scanf só para limpar o '\n'.

 

E um outro citação de post anterior meu que é relevante:

 

Em 15/07/2019 às 18:41, isrnick disse:

Uma solução mais completa seria colocar uma função como essa no código:


void limpastdin(){
    int ch;
    while((ch = getchar()) != '\n' && ch != EOF);
}

 

E chamar a função após cada scanf para limpar quaisquer caracteres que ficarem sobrando na entrada padrão.


scanf("%i", &employerquant);
limpastdin();

 

 

 

 

Que IDE está usando?

 

A execução não fecha imediatamente, o programa é executado normalmente até o fim, e encerra normalmente, o problema é que quando o programa acaba a janela fecha sem dar tempo para você visualizar o que foi impresso.

 

Várias coisas podem ser feitas, tipicamente iniciantes costumam usar a função system("pause"); antes do fim da função main para pausar o programa antes de fechar a janela.

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!