Ir para conteúdo
Fórum Script Brasil
  • 0

Ignorando Meu Printf


Aircrash

Pergunta

Pessoal continuo desenvolvendo o menu do meu primeiro programa e depois de resolver o problema do switch agora me deparei com uma cena inusitada, vou postar o código inteiro aqui e explicar o por quê.

#include <conio.h>

#include <stdio.h>

#include <dos.h>

void main (void)

{

int modo, qtdtempo, qtdvoltas;

char nomevermelho[20];

char nomeamarelo[20];

char sim;

again:;

clrscr();

printf("****************************************************************\n");

printf(" Programa Autorama V0.5\n");

printf("****************************************************************\n");

printf("========================Menu Principal==========================\n");

printf("Digite a opção desejada:\n");

printf("(1) - Jogo por tempo\n");

printf("(2) - Jogo por voltas\n");

printf("(3) - Sair\n\n");

modo = getch();

switch (modo)

{ case '1':

printf("Quanto tempo? (Digite o tempo em minutos, mínimo 1 máximo 59)\n");

scanf("%d",&qtdtempo,"\n");

break;

case '2':

printf("Quantas voltas? (Mínimo 1 e máximo 99)\n");

scanf("%d",&qtdvoltas,"\n");

break;

case '3':

printf ("Saindo...");

delay(1000);

exit(1);

break;

default:

printf ("\nOpcao incorreta, tente novamente");

delay (1000);

goto again;

}

printf("****************************************************************\n");

printf("=======================Dados dos Jogadores======================\n");

printf("Digite o Nome do piloto do carro vermelho:\n");

scanf("%s ",&nomevermelho);

printf("\nDigite o Nome do piloto do carro amarelo:\n");

scanf("%s",&nomeamarelo);

printf("****************************************************************\n");

printf("=======================Verifique os dados=======================\n");

printf("%s pilotará o carro vermelho\n",nomevermelho);

printf("%s pilotará o carro amarelo\n",nomeamarelo);

if (modo=='1')

{

printf("Modo de jogo selecionado: Jogo por tempo\n");

printf("Vence quem tiver o maior numero de voltas no final de %d minutos\n",qtdtempo);

}

else

{

printf("Modo de jogo selecionado: Jogo por voltas\n");

printf("Vence quem atingir primeiro as %d voltas\n", qtdvoltas);

}

printf("Dados corretos? (Pressione S para sim e N para Não)\n");

sim=getch();

if (sim=='n')

{

goto again;

}

}

Bem acontece o seguinte o programa roda bem até chegar aqui

printf("Digite o Nome do piloto do carro vermelho:\n");

scanf("%s ",&nomevermelho);

printf("\nDigite o Nome do piloto do carro amarelo:\n");

scanf("%s",&nomeamarelo);

Neste momento ele mostra a mensagem do piloto do carro vermelho e pede para eu digitar algo scanf &nomeverlho funciona ok. porém após eu dar enter em vez dele me mostrar o printf nome do poiloto do carro amarelo, ele me pelo que eu digite mais alguma coisa o scanf &nomeamarelo, ai eu digito e só depois ele me mostra o printf(nome do carro amarelo).

Se eu trocar o scanf por um gets conforme abaixo

printf("Digite o Nome do piloto do carro vermelho:\n");

gets(nomevermelho);

printf("\nDigite o Nome do piloto do carro amarelo:\n");

gets(nomeamarelo);

Ele me mostra os dois printf e pede para eu digitar alguma coisa eu digito e isto é armazenado na nomeamarelo, porém ele nem sequer pede a do nomevermelho.

Já quebrei a cabeça e não consegui entender o problema

OBS: Sei que não se deve postar o código inteiro, mas postei porque se eu pegar apenas o pedaço citado e compilar um programa a desgraça funciona normalmente, só não funciona quando fica dentro deste código.

Será que alguém me ajuda?

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

1º Na função scanf você ao ler uma string, na especificação da variável como scanf("%s ",&nomevermelho); o nome da variável é um ponteiro e você não precisa especificar então o "&" (o E comercial em "nomevermelho"). A função scanf funciona do seguinte modo: ela lerá dados vindos do teclado até que se digite um espaço em branco (espaço normal do teclado, retorno de carro = enter ou uma tabulação = tab), ela então colocará os caracteres lidos em uma matriz de caracteres apontado por "nomevermelho" e não "&nomevermelho". Lembre-se em C strings designam ponteiros. A própria função scanf já se encarrrega de colocar o barra zero "" no final da string. Se você digitar um nome como "Fulano de Tal", ele lerá só a string "Fulano".

2º Tente em vez de printf colocar int puts("const char *str"). É uma função um pouco mais veloz que printf pois só imprime caracteres. Funciona semelhante a printf como esse exemplo

/*certo*/

puts("Digite o nome do carro vermelho\n");
/*errado, deve-se usar o printf*/
puts ("O número do carro é %d", númerocarro);

Tente combinar isso com "gets()" do jeito que você propôs está certo ela realmente recebe um ponteiro.

Avise-me se der certo, ok? Pois estou tentando aprender com o abacaxi do outros kkkk

Link para o comentário
Compartilhar em outros sites

  • 0

Hmmm.... e se eu dissesse a vocês que o erro só aconteceu por causa de um espaço em branco?

printf("Digite o Nome do piloto do carro vermelho:\n");
scanf("%s ",&nomevermelho);
Aircrash, se você observar bem, verá que colocou um espaço em branco após o %s, antes de fechar as aspas. Para "tentar" entender porque isso acontece, veja esta imagem (texto, enfim...): SCANF E, bom, o Lucas tem razão quando diz que, para strings, a função scanf deve ser usada sem o E comercial (&)
scanf("%s", nomevermelho);

Link para o comentário
Compartilhar em outros sites

  • 0

Pessoal o erro estava no espaço que o Flávio informou, após corrigir funcionou normalmente.

Fressato o delay e pause eu tinha tentado para ver se não era algum erro de input.

Lucas ainda não cheguei em ponteiros na faculdade, estou com um livro de C para me auxiliar no programa e cheguei a ler ponteiros, embora eu não tenha entendido o porquê de usá-lo se ele aponta para o endereço de uma variável e eu posso chamar direto a variável ??? mas acho que quando eu tiver mais avançado eu acho função para ele. rsrsrs

Quanto ao scanf fiz o teste aqui e ele deu exatamente o mesmo resultado tanto usando o &(address of) e sem o &

E mais uma vez obrigado, agora eu já tenho a função de entrada, e a de corpo do meu projeto, agora só falta uma função para print na tela.

Link para o comentário
Compartilhar em outros sites

  • 0

Fala cara resposta meio atrasada...

mas pelo q eu entendi esse erro que esta acontecendo com você é um erro do BUILDER...

esse erro ocorre porque o compilador pega um "lixo" armazenado no cache do teclado, assim como ele pega o lixo ele pula pro proximo.

tente colocar o codigo fflush(stdin);

entre o "printf" e o "scanf".

Exemplo:

printf("Digite o Nome do piloto do carro vermelho:\n");

fflush(stdin);

scanf("%s ",&nomevermelho);

printf("\nDigite o Nome do piloto do carro amarelo:\n");

fflush(stdin);

scanf("%s",&nomeamarelo);

Espero que ajude.

Abraço!

Editado por Rafael F.
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...