Ir ao conteúdo

C Função que retorne uma String em C


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

Posts recomendados

Postado

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.

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

 

Postado

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

 

  • Solução
Postado

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

 

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

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!