C линейный поиск не может сравнить две строки с помощью strcmp, компилирует нормально - PullRequest
1 голос
/ 21 мая 2019

Программа запускается и завершает работу с кодом 0, но не выдает никаких результатов. Предполагается, что это программа линейного поиска.

Я смотрел на другие подобные проблемы, пытался завершить массив с помощью \ n.пытаясь вместо того, чтобы просто полагаться только на "if (strcmp = 0)", чтобы сделать что-то со значениями, возвращаемыми strcmp, я очень новичок и, что я изучаю, не очень хорошо, просто сделал вещи хуже, я попытался посмотретьесли бы это было о значениях char *, ожидаемых strcmp, но не смогло найти проблему

#include <stdio.h>
#include <string.h>
#define max 15

int lineal(char elementos[], char elebus)
{
    int i = 0;
    for(i=0; i<max; i++)
    {
        if(strcmp(elementos[i], elebus)==0)
        {
        printf("Elemento encontrado en %d,", i); //element found in
        }
    else 
        {
        printf("elemento no encontrado"); //not found
        }
    }

}

int main()
{
    char elebus[50];
    char elementos[max][50]= {"Panque", "Pastel", "Gelatina", "Leche", "Totis", "Tamarindo" "Papas", "Duraznos", "Cacahuates", "Flan", "Pan", "Yogurt", "Café", "Donas", "Waffles"};
    printf("Escribir elemento a buscar\n");
    scanf("%s", elebus);

    int lineal(char elementos[], char elebus);
}

Ожидаемый результат был бы элементом, найденным в позиции "i", если был найден, если не найден, напечатать "not found"

1 Ответ

0 голосов
/ 21 мая 2019

Вы хотите передать ему строку, чтобы найти, а не только один символ. Также, elementos должен быть двумерным массивом.Измените сигнатуру вашей функции следующим образом:

int lineal(char elementos[max][50], char *elebus)

Кроме того, в main вы не вызываете функцию.Вместо этого вы просто объявляете это снова.Назовите это так:

lineal(elementos, elebus);

Кроме того, я бы изменил, чтобы он возвращал void вместо int.Вы ничего не возвращаете (это неопределенное поведение) и нигде не используете возвращаемое значение.Но я предполагаю, что это не окончательная версия, и вы хотите вернуть индекс в какой-то момент.время не совпадает, даже если оно в конце концов найдет его.Вместо этого я бы порекомендовал:

for (i = 0; i < max; i++)
    {
        if (strcmp(elementos[i], elebus) == 0)
        {
            printf("Elemento encontrado en %d\n,", i); //element found in
            return;
        }
    }
    printf("elemento no encontrado\n"); //not found

Это печатает "elemento no encontrado" только один раз и только когда строка не найдена.

...