Ir ao conteúdo
  • Cadastre-se

C Função que retorne uma String em C


Ir à solução Resolvido por Eduardo de Quadros,

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.

Link para o comentário
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;
}

 

Link para o comentário
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;
}

 

Link para o comentário
Compartilhar em outros sites

  • Solução

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;
}

 

Link para o comentário
Compartilhar em outros sites

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