В этом коде есть несколько ошибок.
1) while (s[j] != '0')
Я вполне уверен, что вы хотите проверять NUL-символ, а не символьную константу ноль. Изменить '0'
на '\0'
2) j++
Вы увеличиваете j прежде, чем вы даже посмотрите на 0-й индекс вашего массива. Если бы у вас была гласная в s [0], это было бы пропущено. Переместите j++
в самый конец цикла while, непосредственно перед конечной скобкой.
3) s[j] = 'a'
Вы используете оператор присваивания =
здесь, когда вам следует вместо этого использовать оператор равенства ==
. Использование оператора присваивания является допустимым кодом C и, следовательно, будет компилироваться. К сожалению, он вернет true, и в итоге вы замените всех своих персонажей звездочками
4) putchar(j);
Вы пытаетесь вывести 'j' (ваш итератор), когда вы действительно хотите вывести s [j] (ваш персонаж).
5) return 0
так же, как в # 2, ваше заявление о возврате находится не в том месте. У вас это есть в цикле while, когда оно должно быть вне от него. Как вы и написали, цикл while выполнит только первую итерацию до того, как ваша функция выйдет из области видимости.
int star_vowels(char s[]) {
int j = 0;
while (s[j] != '\0'){
if (s[j] == 'a' || s[j] == 'e' || s[j] == 'i' || s[j] == 'o' || s[j] == 'u') {
putchar('*');
} else {
putchar(s[j]);
}
j++;
}
return 0;
}