ошибка: присвоение 'int' из несовместимого типа 'void' - PullRequest
0 голосов
/ 03 июня 2018

Я пытаюсь написать функцию, которая будет принимать строку и символ и будет возвращать индекс того места, где последний символ встречается.У меня проблемы с компиляцией, как видно из заголовка вопроса, я получаю ошибку:

ошибка: присваивание 'int' из несовместимого типа 'void'

Я попытался изменить «void» функции на «int», а затем попытался заставить функцию напечатать результат, однако это привело к другому набору ошибок.Я просто сбит с толку, потому что мой учитель всегда показывал нам функции, которые всегда имели «void» в качестве возвращаемого типа, и этот тип возврата - единственный, на который наш класс смотрел до сих пор.

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


void findLast (char string[], char letter){

    int Num[20];
    int i;
    int count=-1;

    for (i=0; i<strlen(string);i++){

        if (letter==string[i]){


            count=count+1;
                Num[count]=i;
        }
    }

    int result=Num[count];

}


int main (void){

    char string[20];
    char letter;
    int result;

    printf("Enter your string: ");
    scanf("%s", string );

    printf("Enter your letter: ");
    scanf(" %c", &letter);

    result = findLast(string, letter);

    printf("%d", result);

    return 0;

}

Ответы [ 3 ]

0 голосов
/ 03 июня 2018

Ваша кодовая функция имеет тип void, что означает отсутствие возвращаемого значения.Просто измените тип функции на int и верните его с результатом.

Модифицированный код:

int findLast (char string[], char letter){

    int Num[20];
    int i;
    int count=-1;

    for (i=0; i<strlen(string);i++){

        if (letter==string[i]){


            count=count+1;
                Num[count]=i;
        }
    }

    int result=Num[count];

    return result;

}
0 голосов
/ 03 июня 2018

Тип void указывает, что функция не возвращает значение.Поскольку ваша функция должна возвращать целое число, вам нужно заменить void на int и вернуть результат с помощью оператора return.Также переменные Num и count не нужны.В вашем цикле for функция strlen вызывается несколько раз.Более эффективно использовать терминатор строки в качестве защиты цикла.Вот упрощенная версия:

int findLast(char string[], char letter)
{
    int result, i;

    result = -1;
    i = 0;
    while (string[i] != '\0') {
        if (string[i] == letter) {
            result = i;
        }
        i++;
    }
    return result;
}
0 голосов
/ 03 июня 2018

Как упоминалось @HolyBlackCat, ваша функция должна возвращать значение и должна быть записана следующим образом:

int findLast (char string[], char letter){    

    return Num[count];    
}

Ключевое слово void указывает, что ничего не будет возвращено.

...