Ir ao conteúdo

Posts recomendados

Postado

@lucas.suanderhus      linux nunca mexi nele , então não sei como funciona , mas experimente remover esse system pause . por que se você estiver usando o compilador dev c++ , o terminal fecha rapidamente , por  isso o pause para ver o que está na tela antes de fechar .

Postado

Olá!
 
Na sua rotina() você declarou S[] como char. Então S é um ponteiro para char. E assim S[0] que também pode ser escrito como S é um char. Em main() você declara char str[4] e chama rotina(str) passando str como parâmetro para sua rotina(). Então em rotina() você pode usar acessar S[0] ou S, S[1] e S[2] e S[3].

 

Por outro lado "SIM" é uma string, char*. Mesmo caso de "SAIR" e de "NAO". Então você não pode escrever

if(S=="SIM")
ou
if(S=="NAO")

porque do lado esquerdo tem um char e do lado direito tem um ponteiro para char.

Você pode escrever

if(S == 'S')

porque S é char e 'S' é char
ou 

if(strcmp(S,"SIM) == 0)

porque essa rotina aceita dois parâmetros do tipo char*, ponteiros para char. E "SIM" é do tipo char*, uma string. E S é do tipo char* declarado como S[]. strcmp() retorna 0 se as duas strings são iguais, algum valor < 0 se a primeira for menor e algum valor >0 se a segunda string for maior que a primeira

 

Seu enunciado diz claramente para aceitar "SIM" ou "NAO" então eu não recomendo ir além do que está escrito e se preocupar com maiúsculas e minúsculas... Mas não sou seu professor :D


Assim sendo você tem duas opções: pode usar o que alguns chamam de árvore de decisão e ir vendo se o cara digitou S depois I ou A e tal... Testando uma letra por vez. Ou usar strcmp() e testar as strings.


Seu enunciado diz claramente que não é pra retornar exceto com "SIM" ou "NAO" e que não pode voltar a ler quando ler um "SAIR", de modo que deve ser o caso de encerrar o programa sem retornar chamando exit().

 

Assim essas duas serviriam

int rotina()
{
    const char* SIM = "SIM";
    const char* NAO = "NAO";
    const char* SAIR = "SAIR";
    char            entrada[40];

    do
    {
        printf("rotina(): Entre string: ");
        scanf("%s", entrada);
        if (strcmp(entrada, "SIM") == 0) return 1;
        if (strcmp(entrada, NAO) == 0) return 0;
        if (strcmp(entrada, SAIR) != 0) continue;
        printf("Leu \"SAIR\". Encerrando\n");
        exit(0);
    } while (1);

}    // end rotina()

usando strcmp() ou

int rotina_b()
{
    char    entrada[40];
    do
    {
        printf("rotina(): Entre string: ");
        scanf("%s", entrada);
        if (entrada[0] == 'S')
        {
            if (    (entrada[1] == 'A') &&
                    (entrada[2] == 'I') &&
                    (entrada[3] == 'R')
            )
            {
                printf("Leu \"SAIR\". Encerrando\n");
                exit(0);
            }
            else
            {
                if ((entrada[1] == 'I') &&
                    (entrada[2] == 'M')
                )
                {
                    return 1;
                }
                else
                {
                    continue;
                }
            }    // end if    
        }
        else
        {    // nem SIM nem SAIR: pode SER NAO
            if ((entrada[0] == 'N') &&
                (entrada[1] == 'A') &&
                (entrada[2] == 'O')
                )
                return 0;
            else
                continue;
        }    // end if 'S'
    } while (1);

}    // end rotina_b()

Usando os char apenas

Essa simples função main()

int    main(int argc, char** argv)
{
    int v;
    while (1)
    {
        v = rotina_b();
        printf("main(): rotina() retornou %d\n", v);
    }    // end while()
    return 0;
}    // end main()

mostraria isso

rotina(): Entre string: 12
rotina(): Entre string: 12
rotina(): Entre string: 12
rotina(): Entre string: SIM
main(): rotina() retornou 1
rotina(): Entre string: NAO
main(): rotina() retornou 0
rotina(): Entre string: SAIR
Leu "SAIR". Encerrando

Como esperado. Note que em C 1 é sempre verdade então while(1) é comum de se escrever quando se sabe que um loop vai terminar por alguma maneira dentro dele, como por uma chamada a exit().

  • 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

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!