Ir ao conteúdo

Posts recomendados

Postado
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);
	}}}

 

Postado

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
Postado

É 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

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!