Dictionary in C always returns "word not found"

Asked

Viewed 1,036 times

3

I am having problems with the code below. Although the user type a word available, the return is always palavra nao encontrada.

#include <stdio.h>
#include <stdbool.h>

struct dicionario {     
    char palavra[21];
    char definicao[51];     
};

bool compararpalavras (const char palavra1[], const char palavra2[]) {      
    int x = 0;      
    while (palavra1[x] == palavra2[x] && palavra1[x] != '\0' && palavra2[x] !='\0') {
        ++x;                
    }
    if (palavra1[x] == '\0' && palavra2[x] == '\0') {           
        return true;            
    } else {            
        return false;           
    }
}

int procurarpalavras (const struct dicionario lingua[], const char palavra[], const int numdepalavras) {        
    bool compararpalavras (const char palavra1[], const char palavra2[]);       
    int x = 0;      
    while (x < numdepalavras) {         
        if (compararpalavras(procurarpalavras, lingua[x].palavra)) {                
            return x;               
        } else {                
             ++x;               
        }       
    }
    return -1;  
}

int main (void) {

    int procurarpalavras (const struct dicionario lingua[], const char palavra[], const int numdepalavras);

    const int NUMERODEDEFINICOES = 7;
    char palavra[21] = {'\0'};
    int resultadopesquisa;
    int sair;

    const struct dicionario portugues[7] = {
    {"pao", "alimento a base de farinha"},
    {"mortadela", "tipo de carne"}, 
    {"feijao", "comida brasileira"},
    {"tropeiro", "tipo de feijao"},
    {"queijo", "de minas"},
    {"macarronada", "massa gostosa"},
    {"pizza", "tipico da italia"}};

    printf ("digite uma palavra: ");
    scanf ("%s", palavra);

    resultadopesquisa = procurarpalavras (portugues, palavra, NUMERODEDEFINICOES);

    if (resultadopesquisa != -1) {
        printf ("%s\n", portugues[resultadopesquisa].definicao);
    } else {
        printf ("\npalavra nao encontrada\n");
    }
    system ("pause");
    }
  • In which environment this code is being compiled?

  • This also works perfectly for C++, would you mind putting the tag of it or that I put? Only put it if you think I would not have any problem.

2 answers

4


I believe it was just an inattention.

#include <stdio.h>
#include <stdbool.h>

struct dicionario {     
    char palavra[21];
    char definicao[51];     
};

bool compararpalavras (const char palavra1[], const char palavra2[]) {      
    int x = 0;      
    while (palavra1[x] == palavra2[x] && palavra1[x] != '\0' && palavra2[x] !='\0') {
        ++x;                
    }
    return palavra1[x] == '\0' && palavra2[x] == '\0';
}

int procurarpalavras (const struct dicionario lingua[], const char palavra[], const int numdepalavras) {        
    bool compararpalavras (const char palavra1[], const char palavra2[]);       
    int x = 0;      
    while (x < numdepalavras) {         
        if (compararpalavras(palavra, lingua[x].palavra)) {                
            return x;               
        } else {                
             ++x;               
        }       
    }
    return -1;  
}

int main (void) {
    int procurarpalavras(const struct dicionario lingua[], const char palavra[], const int numdepalavras);
    const int NUMERODEDEFINICOES = 7;
    char palavra[21] = {'\0'};
    int resultadopesquisa;
    const struct dicionario portugues[7] = {
        {"pao", "alimento a base de farinha"},
        {"mortadela", "tipo de carne"}, 
        {"feijao", "comida brasileira"},
        {"tropeiro", "tipo de feijao"},
        {"queijo", "de minas"},
        {"macarronada", "massa gostosa"},
        {"pizza", "tipico da italia"}};
    printf ("digite uma palavra: ");
    scanf ("%s", palavra);
    resultadopesquisa = procurarpalavras (portugues, palavra, NUMERODEDEFINICOES);
    if (resultadopesquisa != -1) {
        printf ("%s\n", portugues[resultadopesquisa].definicao);
    } else {
        printf ("\npalavra nao encontrada\n");
    }
}

Behold working in the ideone. And in the repl it.. Also put on the Github for future reference.

I switched the

if (compararpalavras(procurarpalavras, lingua[x].palavra)) {

for

if (compararpalavras(palavra, lingua[x].palavra)) { 

0

Just change the code line of :

if (compararpalavras(procurarpalavras, lingua[x].palavra))

To

if (compararpalavras( lingua[x].palavra, palavra))
  • The time of posting. I can delete it if it is of interest to you.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.