Ir ao conteúdo
  • Cadastre-se

Meu vetor esta pulando a primeira posição[0] para posição[1]


leonardosb

Posts recomendados

Quando aparece a mensagem "Deseja cadastrar quantos personagens?", se eu apertar "3"
 
o vetor não começa da posição [0], ja pula para a posição [1], alguem pode me ajudar ? segue a sintaxe abaixo:
 

 
system("color 0A");
printf("Jogo");
printf("\n-------------");
printf("\n1-Cadastrar personagens");
printf("\n0-Sair do jogo");
printf("\nEscolha sua opcao:");
scanf("%d", &opcao);
 
 
switch(opcao){
 
 
case 1:
printf("\nDeseja cadastrar quantos personagens?:");
scanf("%d", &numero);
system("cls");
 
for (i = 0; i < numero; i++) { 
printf ("Digite o nome do personagem %d: ", i); 
  gets (personagens);
  system("cls");
 
}

 

Link para o comentário
Compartilhar em outros sites

Boa Noite @leonardosb

Está acontecendo 'bug da nova linha'.

 

Quando o usuário entra com número, ele faz o seguinte 'input' (entrada)

 

3 [/ENTER]

 

Na função scanf: O valor inteiro 3 é passado para variável, seguindo de acordo;

Contudo, um caractere é ignorado e fica na memória (stream de entrada) esse caractere é o \n (caractere de Nova Linha) criado ao pressionar a tecla [/ENTER].

Chegamos  função que captura por sua vez esse caractere restante, passando para valor do ponteiro e finaliza.

 

Para evitar problema, existe várias soluções dentre elas uma estrutura de repetição que limpará este e outros caracteres restantes no input.

Dou a seguinte solução de exemplo:

#include <stdio.h>int main (void) {    int idade        = 0;    char seuNome[31] = {0};        printf ("OLA! QUANTOS ANOS você TEM?\n");         scanf ("%d", &idade);         while (getchar () != '\n'); //> Eliminando o [/ENTER]        printf ("QUAL SEU NOME?\n");         scanf ("%30[^\n]", seuNome);         while (getchar () != '\n'); //> Eliminando o [/ENTER]        printf ("\n\nOow!!: %s\n", seuNome);         if (60 > idade) printf ("você E JOVEM AINDA...");         if (60 < idade) printf ("você ESTA NA MELHOR IDADE, ...");         printf ("\n\n");    return 0;   } 

Podemos discutir mais se você precisar, é só perguntar.

Obrigado e bons códigos.

 

</dyR3X>

Link para o comentário
Compartilhar em outros sites

Boa madruga rsrs

 

 

Então funcionou para que ele imprima a primeira posição do for, mas ele agora começou a incluir uma linha a mais no for ex:

 

//MENU
system("color 0A");
printf("Jogo");
printf("\n-------------");
printf("\n1-Cadastrar personagens");
printf("\n0-Sair do jogo");
srand(100);
printf("\nEscolha sua opcao:");
scanf("%d", &opcao);
//----------------------------------------------------------------------------------
switch(opcao){
 
case 1:
printf("\nDeseja cadastrar quantos personagens?:");//entrando com o numero de personagens
scanf("%d", &numero);
while(getchar () !='\n');
system("cls");
for (i = 0; i <= numero; i++) { 
printf ("Digite o nome do personagem %d: ", i); //cadastrando o nome dos personagens
  gets (personagens);
  }//for
 
  printf("\n");
 
//-------------------------------Como esta sendo executado--------------------------------------------------------
 
Deseja cadastrar quantos personagens?)
Resposta do usuario: 3
 
//na tela imprimi
 
Digite o nome do personagem 0: Leonardo
Digite o nome do personagem 1: Fernanda
Digite o nome do personagem 2:Carlos
ERRO: Digite o nome do personagem 3: //Essa ultima posição do for não deveria aparecer, mais esta aparecendo.
 
 
 
// Imprimi na tela
 
 
leonardo
fernanda
carlos
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Link para o comentário
Compartilhar em outros sites

Bom Dia @leonardosb,

 

Tudo bem?

Abaixo temos o fragmento que contém o novo bug...


for (i = 0; i <= numero; i++) { printf ("Digite o nome do personagem %d: ", i); //cadastrando o nome dos personagens  gets (personagens[i]);  }//for

O Loop FOR tem sua condição lógica estendida até que i seja: Menor ou Igual à numero: for (i = 0; i <= numero; i++)

Então assim digamos que numero := 3, o loop vai até que i = 3!

 


Simulação:

 

 

i =< 0, Loop;

i =< 1, Loop;

i =< 2, Loop;

i =< 3, Loop, && finaliza o bloco FOR.

 

 


Resolução

Basta tirar o sinal de igualdade da condição, ficando desta forma:

for (i = 0; i < numero; i++) {  ...}

e resolve o problema de linha extra.

 

 

 

 

 

:rolleyes:  Será que expliquei bem!?

 

</dyR3X>

 

Link para o comentário
Compartilhar em outros sites

Explicando muito bem :), cara poderia me dar algumas dicas ou curso online que eu possa aprimorar minha logica de programação?

 

 

Atenciosamente!

Nossa ai você 'me pegou',

O mais obvio é que pesquise no Google e as alternativas gratuitas e pagas que há, desta quais são mais didáticas.

Boa Sorte.

 

:)

Link para o comentário
Compartilhar em outros sites

Bom dia, não estou conseguindo imprimir na tela o adversario aleatorio, imprimi tudo em branco, poderia me ajudar,segue abaixo a sintaxe:

 

 

 
 
 
 
 
 
 
 
 
             
             printf("\nAbaixo seu adversario\n\n");
             printf("---------------------------------------------------------------------------------");
             
    srand(time(NULL));
 palavra =rand() %10;
   
   for(i=0;i<numero;i++){
    adversario=personagens[palavra];
    poder2=poder[palavra];
   
}//for
 
printf("\npersonagem:%s\t habilidade:%s poder:%d",adversario,poder2,aleatorios2);
    
printf("\n\n");
 
printf("  O \n");
             printf(" /|\\ \n");
             printf("  |\n");
             printf(" / \\ \n");
             
             printf("\nQUE COMECE A LUTA");
             getch();
           
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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