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

[RESOLVIDO] Problema com Repetição - DO / WHILE


iMorilon

Pergunta

Bom pessoa, estou aprendendo C agora e estou com uma dúvida.

Estou querendo fazer uma confirmação, ele tem que repetir todo o código do início caso o usuário digite a opção "Não" no final.

Estou baseando a lógica no exemplo abaixo:

char nome[31], yn;
    int loop;
    
    /do {
    system("cls");
    printf(" Digite seu nome: ");
    gets(nome);
    
    printf(" Seu nome e: %s \n\n", nome);

    printf(" Seu nome esta correto? (Y/N): ");
    scanf(" %c", yn);
    
    if ((yn==78) || (yn==110)) loop=1; else loop=0;

    } while (loop==1);
Resumidamente, o que eu quero é: Se o cabra digitar que o "Nome" está incorreto, ele consiga digitar NOVAMENTE... Não posso utilizar o goto. Preciso fazer com algo diferente. Estou recebendo o erro e o fechamento do cmd. Que faço? Sei que estou errando, mas onde? EDITANDO: Tentei assim também:
[code]main () {
     
    char nome[31], yn;
    int loop;
    

    system("cls");
    printf(" Digite seu nome: ");
    gets(nome);
    
    printf(" Seu nome e: %s", nome);
    
    if (NomeCHK()==1) return(0);
    if (NomeCHK()==0) main();
    
  
system("pause");
exit(0);

}

int NomeCHK () {
        
        char check;
        
        printf("\n\n Seu nome esta correto? (Y/N): ");
        scanf(" %c", check);                
        
        printf("\n\n");
        switch (check) {
               case 'Y': case 'y': return 0; break;
               case 'N': case 'n': return 1; break;
               default: printf("Digite apenas Y ou N.\n");
               }
        
}

Editado por iMorilon
Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Tente fazer assim

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

int main()
{
   char nome[31], yn;
    int loop;

    do {  
    system("cls");
    fflush(stdin);
    printf(" Digite seu nome: ");
    gets(nome);

    printf(" Seu nome e: %s \n\n", nome);

    printf(" Seu nome esta correto? (Y/N): ");
    scanf(" %c", &yn);

    if ((yn=='N') || (yn=='n'))
    {
       loop=1;
     }
     else
     {
        loop=0;
     }

    } while (loop==1);
    return 0;
}

Na hora de fazer o scanf, você tem que passar o valor para o endereço da variável, você não estava fazendo isso. E além disso, estava comprando um char com uma integer, o que funcionaria, se você tivesse feito a comparação entre char e o seu valor ASCII da forma correta, :D. Da forma que fiz é bem mais fácil. Usei o fflush(stdin) para limpar o buffer depois de cada "do", caso contrário o código não funcionaria na segunda 'ida'. E depois adicionei o return 0, pois como main é uma integer, tem que retornar algo.

Att, Pedro.

Editado por PedroCunha
Link para o comentário
Compartilhar em outros sites

  • 0

Essa barra eu sei lá porque está aí, no meu código num tá não.

A comparação funciona porque é o valor ASCII das letras N e n.

Mas eu já tentei com 'N' e 'n' e num foi também.

As chaves { } no if também não são obrigatórias visto que só tenho uma linha de comando após. (pelo menos segundo meu professor)

É, ainda deu erro. @_@ Tentar meter um switch ali. Que ce acha? To ficando louco, erro besta me irrita.

Fazer um desse

switch (yn) {
               case 'Y': case 'y': loop=0; break;
               case 'N': case 'n': loop=1; break;
               default: printf("Digite apenas Y ou N.\n");
               }

EDITANDO: 16:35

É, erro também. Que b@$!a viu. x)

Editado por iMorilon
Link para o comentário
Compartilhar em outros sites

  • 0

Olha o código que postei. Para comprar com caracteres ASCII você deve usar as aspas simples se não estou enganado, ou a barra invertida. E sim, você não precisa das chaves se for utilizar só uma linha no if.

Link para o comentário
Compartilhar em outros sites

  • 0

Fodermucker!

Funcinou, valeu mano. Eu não faço idéia do que você fez, mas foi. UAEHuhaE.

Xo comparar com o meu código.

Editando: 16:46

Puts, vou enfiar uma agulha no meu olho. Eu achei o erro. &, esqueci do &. @_@

Excelente, ficou show. Valeu cara x)

Agora vou adaptar ao meu programa de verdade, agora que sei como funciona, fica fácil.

Editando: 16:50

Agora sim, 100% funcional:

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

int main()
{
   char nome[31], yn;
    int loop;

    do {  
    system("cls");
    fflush(stdin);
    printf(" Digite seu nome: ");
    gets(nome);

    printf(" Seu nome \x82: %s \n\n", nome);

    printf(" Seu nome esta correto? (Y/N): ");
    scanf(" %c", &yn);

            switch (yn) {
            case 89: case 121: loop=0; break;
            case 78: case 110: loop=1; break;
            default: printf(" Digite apenas Y ou N.\n Insira seu nome novamente.");
            sleep(2500);
            loop=1;
            }

    } while (loop==1);
    return 0;
}

Valeu mesmo cara. É preciso outra pessoa pra achar os erros mais bestas, como pode?

Editado por iMorilon
Link para o comentário
Compartilhar em outros sites

  • 0

Prazer ajudar!

É simples a razão porque quem tá olhando de fora acha os erros mais fácil. É um olhar de cima, sem interferência, :D.

Edit: Acho que a razão da igualdade com caracteres ASCII e char funcionar é porque o compilador é inteligente e sabe que se você está comprando char com alguma integer, essa integer deve ser um valor ASCII.

Editado por PedroCunha
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...