Ir ao conteúdo

Posts recomendados

Postado

Boa tarde pessoal, nesse código abaixo estou enfrentando o problema de não conseguir executar o ciclo abaixo. Logo após que a variável "N" lê um valor, o programa ignora o ciclo e pula para a instrução final, como poderia resolver esse problema?

 

Desde já, agradeço pela atenção.

#include <stdio.h>
 
int main(){
    char comando, posicao = 'Norte';
    int N, i;
    scanf("%d",&N);
    for( i=0 ; i>N ; i++ ){
      scanf("%c",&comando);
        
      if(comando == 'Direita'){
         if(posicao == 'Norte')
           posicao = 'Leste';
         else if(posicao == 'Leste')
           posicao = 'Sul';
         else if(posicao == 'Sul')
           posicao = 'Oeste';
         else if(posicao == 'Oeste')
           posicao = 'Norte';
      }
          
      else if(comando == 'Esquerda'){
        if(posicao == 'Norte')
           posicao = 'Oeste';
         else if(posicao == 'Leste')
           posicao = 'Norte';
         else if(posicao == 'Sul')
           posicao = 'Leste';
         else if(posicao == 'Oeste')
           posicao = 'Sul';
        }
    }
    printf("%c\n", posicao);
    return 0;
}

 

  • Curtir 1
Postado

@donutLukke

34 minutos atrás, donutLukke disse:
char comando, posicao = 'Norte';

você está declarando comando e posicao como char, 1 caractere somente. Se quer mais de um caractere, use uma string.

char posicao[6] = "Norte";

Com espaço pra 6 caracteres: entre norte, sul, leste e oeste, a quantidade máxima de caracteres é 5, e precisa de +1 pro \0, terminador da string. É equivalente a:

char posicao[6] = {'N','o','r','t','e','\0'};

O que vai mudar:

  • Agora esqueça %c, não está mais tratando char comum, vai usar %s para strings.
  • Em scanf() não vai precisar do & pra ler strings, a função já vai ler e gravar a partir do índice 0 da string.
  • Não vai conseguir comparar strings com ==, precisa comparar caractere a caractere, pode usar strcmp() da string.h.
  • Curtir 3
Postado
3 horas atrás, donutLukke disse:
scanf("%d",&N);
    for( i=0 ; i>N ; i++ ){
      scanf("%c",&comando);
        
      if(comando == 'Direita'){
         if(posicao == 'Norte')
           posicao = 'Leste';
 

 

  • Não precisa desses if. Use uma tabela. É muito mais simples e dezenas de vezes mais rápido.
  • Teste o retorno de scanf(). Veja o manual. É ingênuo não testar
  • Não leia uma letra: leia uma string e considere a primeira letra
  • Consuma o ENTER que vai ficar lá, ou use o mais simples: fgets().

 

  • também não precisa do N. É muito chato usar algo assim: o cara tem que saber antes quantos movimentos. Para que? Não é mais simples sair quando ele tecla ENTER?
  • O delimitador para string em C é " 
  • Não pode comparar strings usando ==, como apontado em outras respostas
  • Curtir 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...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!