Ir ao conteúdo

C Lendo string em um while ocorre loop infinito


Ir à solução Resolvido por isrnick,

Posts recomendados

Postado

bom dia,tarde,noite.

 

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

int main()
{
  int n;
  char x[30];

  printf("Escreva qual deseja:\nsoma\nencerrar\nR: ");

  while (strcmp(x,"encerrar")!=0)
  {
    scanf ("%[^\n]%*c",&x);

    if (strcmp(x, "soma")==0)
    {
      printf("\nDigite um numero decimal: ");
      scanf("%d",&n);
      printf ("\n%d",n);
    }
  }
  printf("\nEncerrando programa ...\n");
}

Não sei porque apos a digitação da escolha "soma" ele não retorna ao primeiro scanf? ele continua na soma para sempre.
Obrigado desde já.
 

  • Curtir 2
Postado

Olá...

Eu fiz uma modificações e veja se é como você esperava...

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

int main()
{
  int n,s=0;
  char x[30];

  printf("Escreva qual deseja:\nsoma\nencerrar\nR: ");

  while (strcmp(x,"encerrar")!=0)
  {
    scanf ("%[^\n]%*c",&x);

    if (strcmp(x, "soma")==0)
    {
      printf("\n Digite um numero decimal: ");
      scanf("%d",&n);
      s = s + n;
      printf ("\n Os numero somados foi %d. voce Deseja encerrar: Digite encerrar! ",s);
        
    }
    printf("\n A soma geral foi.: %d ",s,"\n");  
  } 
  if(strcmp(x,"encerrar")!=0){
       
       printf("\nEncerrando programa ...\n");
       system("PAUSE");return 
       EXIT_SUCCESS;
  }
}

Espero ter ajudado e até...

  • Curtir 1
  • Obrigado 1
  • Solução
Postado
  Em 14/09/2018 às 18:46, Lucas Pelepek disse:

scanf ("%[^\n]%*c",&x);

Expandir  

 

x é um vetor de caracteres, e o nome de um vetor sem colchetes já é a referência/endereço de memória do vetor, logo não se usa & antes do nome do vetor para obter a referência.

 

E "%[^\n]%*c" usando %[^\n] junto de %*c no mesmo scanf não funciona como esperado, o %*c não funciona nesse caso, ao invés disso use 2 scanfs um após o outro:

scanf(" %29[^\n]", x);
scanf("%*c");

Observe que limitei a 29 caracteres para garantir que não estoura o tamanho do vetor de caracteres.

  • Curtir 1
  • Obrigado 1
Postado

@Lucas Pelepek Olá. Seguindo a dica dada pelo @isrnick junto com a ideia do @LuisOPsum essa seria uma versão p seu código:

#include <stdio.h>
#include <string.h>

int main()
{
    float n, soma = 0;
    char x[30];

    printf("Escreva qual deseja:\nsoma\nencerrar\nR: ");

    while (1)
    {
        scanf (" %29[^\n]", x);
        scanf("%*c");

        if (!strcmp(x, "soma"))
        {
            printf("\nDigite um numero decimal: ");
            scanf("%f", &n);
            printf ("%.2f\n", n);

            soma += n;

            printf("\nSoma: %.2f\n", soma);

            printf("\nEscreva qual deseja:\nsoma\nencerrar\nR: ");
        }
        if (!strcmp(x, "encerrar"))
            break;
    }
    printf("\nEncerrando programa ...\n");

    return 0;
}

Assim o código fica funcional 

Postado

@LuisOPsum Opa, obrigado , tava apressado e esqueci de mudar o soma pra outra coisa, hahaha, era só pra fazer um exemplo, implementei a dica de vocês em um outro codigo maior, muito obrigado :D.

@isrnick entendi, não sabia disso,tava quebrando minha cabeça, valeu, consertou o codigo :-BEER, vou aplicar sua instrução no futuro :thumbsup:.

@giu_d Ficou lindo, soma era só um exemplo, mas consegui implementar perfeitamente no meu codigo principal.

  • Curtir 2

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

Mostrar 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

Mostrar mais  
×
×
  • Criar novo...