1
resposta

Como comparar uma entrada string dada por uma struct com outra string?

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

/*Perguntas e respostas dos estados do norte*/

typedef struct{
    char capital[40];
    char pib[40];
    int qntd_cidades;
}Perguntas;

Perguntas ler_respostas_amazonas(Perguntas am){
    scanf("%s", &am.capital);
}

char compara_respostas_amazonas(Perguntas am){
    if(strcmp(am.capital,"MANAUS")==0){
        return printf("c");
    }
    else{
        return printf("e");
    }
}
int main(){
    Perguntas am;
    am = ler_respostas_amazonas(am);
    compara_respostas_amazonas(am);

}

Estava fazendo esse código, mas a função compara_resposta_amazonas só retorna "errado". Quando eu coloquei if(strcmp(am.capital,"MANAUS")>0): Retornou "certo", mas não entendi muito bem a natureza do erro com essa comparação.

1 resposta

Olá,

Você esta fazendo o código em C Correto?

Se for esse o caso, para compara duas strings é o strcmp, esse é o caminho correto. Existe ainda strncmp e memcmp.

Mas é basicamente isso mesmo, vc não compara strings da mesma forma que compara numeros em C.

     char fruta1[] = "banana";
     char fruta2[] = "banana";

     // Forma errada de comparar
     if (fruta1 == fruta2) {
         printf("São iguais/n");
     } else {
         printf("Não são iguais/n");
     }

     //forma correta de compara
     if (strcmp (fruta1,fruta2) == 0) {
         printf("São iguais/n");
     } else {
         printf("Não são iguais/n");
     }

     //forma mais correta ainda de compara
     if (strncmp (fruta1,fruta2, strlen(fruta1)) == 0) {
         printf("São iguais/n");
     } else {
         printf("Não são iguais/n");
     }