Я пытаюсь написать функцию, которая будет принимать строку и символ и возвращать индекс места последнего появления символа. У меня проблемы с компиляцией, как видно из названия вопроса, я получаю сообщение об ошибке:
error: assigning to 'int' from incompatible type '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;
}
Измените тип возвращаемого значения на int и поместите return Num[count]; в конец вашей функции.
Если вы пытаетесь найти последнее вхождение символа в строке, вам следует начать с конца строки и сканировать в обратном направлении. Другими словами for (i = strlen(string) - 1; i >= 0; i--) if (letter == string[i]) return i;





Как упоминалось в @HolyBlackCat, ваша функция должна возвращать значение и должна быть написана следующим образом:
int findLast (char string[], char letter){
return Num[count];
}
Ключевое слово void указывает, что ничего не будет возвращено.
Ваша кодовая функция имеет тип 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;
}
Тип void указывает, что функция не возвращает значение. Поскольку ваша функция должна возвращать целое число, вам необходимо заменить void на int и вернуть результат с помощью оператора return. Также переменные Num и считать не нужны. В вашем цикле 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;
}
Если вы намереваетесь вернуть значение, объявленный тип возвращаемого значения должен быть
int, а неvoid, и в функции должен быть операторreturn.