Ir ao conteúdo
  • Cadastre-se
EduardoMQS

C RESOLVIDO Função que retorne uma String em C

Posts recomendados

Eu quero fazer um agente reativo simples de inteligência artificial. Meu código:

 

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <locale.h>
#include <string.h>

char* cadeiraRodasPretaEscritorio(char* tecla, char* estado){
    char* resultado;
    if(strcmp(estado, "ativo") == 0) strcpy(resultado, "Usa o computador!");
    else if(strcmp(estado, "inativo") == 0){
        if(strcmp(tecla, "esquerda") == 0) strcpy(resultado, "Move a cadeira para a esquerda!");
        else if(strcmp(tecla, "direita") == 0) strcpy(resultado, "Move a cadeira para a direita!");
        else if(strcmp(tecla, "acima") == 0) strcpy(resultado, "Move a cadeira para frente!");
        else if(strcmp(tecla, "abaixo") == 0) strcpy(resultado, "Move a cadeira para trás!");
        else if(strcmp(tecla, "A") == 0) strcpy(resultado, "Gira a cadeira para a esquerda!");
        else if(strcmp(tecla, "D") == 0) strcpy(resultado, "Gira a cadeira para a direita!");
        else if(strcmp(tecla, "W") == 0) strcpy(resultado, "Levanta a cadeira!");
        else if(strcmp(tecla, "S") == 0) strcpy(resultado, "Abaixa a cadeira!");
        else strcpy(resultado, "");
    }
    else strcpy(resultado, "");
    return resultado;
}

int main(){
    setlocale(LC_ALL, "portuguese");
    char* estado, tecla, continua2;
    bool continua1;
    do{
        do{
            printf("\n\nSeu estado é ativo ou inativo? ");
            fflush(stdin);
            scanf("%s", &estado);
            printf("Sua tecla é esquerda, direita, acima, abaixo, A, D, W ou S? ");
            fflush(stdin);
            scanf("%s", &tecla);
            printf("\n");
            if(strcmp(cadeiraRodasPretaEscritorio(tecla, estado), "") != 0) printf("%s\n\n", cadeiraRodasPretaEscritorio(tecla, estado));
        }
        while(strcmp(cadeiraRodasPretaEscritorio(tecla, estado), "") == 0);
        if(strcmp(cadeiraRodasPretaEscritorio(tecla, estado), "") != 0){
            do{
                printf("Quer continuar? ");
                fflush(stdin);
                scanf("%s", &continua2);
                if(strcmp(continua2, "sim") == 0) continua1 = true;
                else if(strcmp(continua2, "não") == 0) continua1 = false;
                printf("\n\n");
            }
            while(strcmp(continua2, "sim") != 0 && strcmp(continua2, "não") != 0);
        }
    }
    while(continua1);
    return 0;
}

 

O erro de compilação no CodeBlocks é Permission denied e 1d returned 1 exit status.

Compartilhar este post


Link para o post
Compartilhar em outros sites
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <locale.h>
#include <string.h>

char* cadeiraRodasPretaEscritorio(char* tecla, char* estado){
    if(strcmp(estado, "ativo") == 0) return "Usa o computador!";
    else if(strcmp(estado, "inativo") == 0){
        if(strcmp(tecla, "esquerda") == 0) return "Move a cadeira para a esquerda!";
        else if(strcmp(tecla, "direita") == 0) return "Move a cadeira para a direita!";
        else if(strcmp(tecla, "acima") == 0) return "Move a cadeira para frente!";
        else if(strcmp(tecla, "abaixo") == 0) return "Move a cadeira para trás!";
        else if(strcmp(tecla, "A") == 0) return "Gira a cadeira para a esquerda!";
        else if(strcmp(tecla, "D") == 0) return "Gira a cadeira para a direita!";
        else if(strcmp(tecla, "W") == 0) return "Levanta a cadeira!";
        else if(strcmp(tecla, "S") == 0) return "Abaixa a cadeira!";
    }
    return NULL;
}

int main(){
    setlocale(LC_ALL, "portuguese");
    char estado[20], tecla[20], continua2[20];
    bool continua1;
    do{
        do{
            printf("\n\nSeu estado é ativo ou inativo? ");
            fflush(stdin);
            scanf("%s", estado);
            printf("Sua tecla é esquerda, direita, acima, abaixo, A, D, W ou S? ");
            fflush(stdin);
            scanf("%s", tecla);
            printf("\n");
            if (cadeiraRodasPretaEscritorio(tecla, estado) != NULL) printf("%s\n\n", cadeiraRodasPretaEscritorio(tecla, estado));
        }
        while(cadeiraRodasPretaEscritorio(tecla, estado) == NULL);
       
            do{
                printf("Quer continuar? ");
                scanf("%s", continua2);
                if(strcmp(continua2, "sim") == 0) continua1 = true;
                else if(strcmp(continua2, "não") == 0) continua1 = false;
                printf("\n\n");
            }
            while(strcmp(continua2, "sim") != 0 && strcmp(continua2, "não") != 0);
        
    }
    while(continua1);
    return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Flávio Pedroza Pra mim deu o mesmo erro, o erro de compilação no CodeBlocks é Permission denied e 1d returned 1 exit status.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Assim funcionou para mim:

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

#define TAMANHO_STRING 20

char *toUpperCase(char *string);

char *cadeiraRodasPretaEscritorio(char *tecla, char *estado);

int main() {
    char estado[TAMANHO_STRING] = "";
    char tecla[TAMANHO_STRING] = "";
    char resultado[TAMANHO_STRING * 2] = "";

    char continuar = 'S';

    while (continuar == 'S') {
        do {
            printf("Seu estado é [ ATIVO / INATIVO ]: ");
            scanf(" %s", estado);
            strcpy(estado, toUpperCase(estado));

            printf("Sua tecla é [ ESQUERDA / DIREITA / ACIMA / ABAIXO / A / D / W / S ]: ");
            scanf(" %s", tecla);
            strcpy(tecla, toUpperCase(tecla));

            strcpy(resultado, cadeiraRodasPretaEscritorio(tecla, estado));

            // Se os dados foram validos
            if (strcmp(resultado, "") != 0) {
                printf("%s \n\n", resultado);
            }
        } while (strcmp(resultado, "") == 0);   // E vazio porque informou dados invalidos

        do {
            printf("Quer continuar? [ S / N ]: ");
            scanf(" %c", &continuar);
            continuar = _toupper(continuar);
        } while (continuar != 'S' && continuar != 'N');
    }

    return EXIT_SUCCESS;
}

/**
 * Transforma todas as letras da string em maiusculas.
 *
 * @param string String para ser modificada.
 *
 * @return A string com todas as letras em maiusculas.
 */
char *toUpperCase(char *string) {
    for (int i = 0; string[i] != '\0'; ++i) {
        string[i] = _toupper(string[i]);
    }

    return string;
}

/**
 * Analisa as entradas.
 *
 * @param tecla Acao de foi tomada.
 * @param estado Estado atual da cadeira.
 *
 * @return Acao que deve ser realizada.
 */
char *cadeiraRodasPretaEscritorio(char *tecla, char *estado) {
    char *resultado = "";

    if (strcmp(estado, "ATIVO") == 0) {
        resultado = "Usa o computador!";
    } else if (strcmp(estado, "INATIVO") == 0) {
        if (strcmp(tecla, "ESQUERDA") == 0) {
            resultado = "Move a cadeira para a esquerda!";
        } else if (strcmp(tecla, "DIREITA") == 0) {
            resultado = "Move a cadeira para a direita!";
        } else if (strcmp(tecla, "ACIMA") == 0) {
            resultado = "Move a cadeira para frente!";
        } else if (strcmp(tecla, "ABAIXO") == 0) {
            resultado = "Move a cadeira para trás!";
        } else if (strcmp(tecla, "A") == 0) {
            resultado = "Gira a cadeira para a esquerda!";
        } else if (strcmp(tecla, "D") == 0) {
            resultado = "Gira a cadeira para a direita!";
        } else if (strcmp(tecla, "W") == 0) {
            resultado = "Levanta a cadeira!";
        } else if (strcmp(tecla, "S") == 0) {
            resultado = "Abaixa a cadeira!";
        }
    }

    return resultado;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvido!

 

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <locale.h>
#include <string.h>

char* cadeiraRodasPretaEscritorio(char* tecla, char* estado){
    if(strcmp(estado, "ativo") == 0) return "Usa o computador!";
    else if(strcmp(estado, "inativo") == 0){
        if(strcmp(tecla, "esquerda") == 0) return "Move a cadeira para a esquerda!";
        else if(strcmp(tecla, "direita") == 0) return "Move a cadeira para a direita!";
        else if(strcmp(tecla, "acima") == 0) return "Move a cadeira para frente!";
        else if(strcmp(tecla, "abaixo") == 0) return "Move a cadeira para trás!";
        else if(strcmp(tecla, "A") == 0) return "Gira a cadeira para a esquerda!";
        else if(strcmp(tecla, "D") == 0) return "Gira a cadeira para a direita!";
        else if(strcmp(tecla, "W") == 0) return "Levanta a cadeira!";
        else if(strcmp(tecla, "S") == 0) return "Abaixa a cadeira!";
    }
    return "";
}

int main(){
    setlocale(LC_ALL, "portuguese");
    char estado[20], tecla[20], continua2[20];
    bool continua1;
    printf("A cadeira de rodas preta de escritório tem como a medida de desempenho, a posição, a distância e o ângulo do computador, ");
    printf("tem o ambiente totalmente observável, determinístico, estático, discreto e de agente único e tem o atuador");
    printf(" como a ação de como movimentar a cadeira e de quando usar o computador e tem o sensor como a o estado de quem está sentado e ");
    printf("a tecla de computador que o usuário fala.");
    do{
        do{
            printf("\n\nSeu estado é ativo ou inativo? ");
            fflush(stdin);
            scanf("%s", &estado);
            printf("Sua tecla é esquerda, direita, acima, abaixo, A, D, W ou S? ");
            fflush(stdin);
            scanf("%s", &tecla);
            printf("\n");
            if(strcmp(cadeiraRodasPretaEscritorio(tecla, estado), "") != 0) printf("%s\n\n", cadeiraRodasPretaEscritorio(tecla, estado));
        }
        while(strcmp(cadeiraRodasPretaEscritorio(tecla, estado), "") == 0);
        do{
            printf("Quer continuar [S/N]? ");
            fflush(stdin);
            scanf("%s", &continua2);
            if(strcmp(continua2, "S") == 0) continua1 = true;
            else if(strcmp(continua2, "N") == 0) continua1 = false;
            printf("\n\n");
        }
        while(strcmp(continua2, "S") != 0 && strcmp(continua2, "N") != 0);
    }
    while(continua1);
    return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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...

Eletrônica

PROMOÇÃO DE QUARENTENA

Aproveite o isolamento social para aprender eletrônica!
De R$ 39,90 por apenas R$ 19,90
Só até as 23h59min desta sexta-feira 10/04/2020

CLIQUE AQUI E COMPRE AGORA MESMO!