Ну, как ты написал - так она и работает. Если гласная, то выводим согласную, а если согласная то ничего не делаем.
if (string == 'e') {
putchar(f);
}
if (string == 'i') {
putchar(j);
}
if (string == 'o') {
putchar(p);
}
if (string == 'u') {
putchar(v);
}
if (string == 'y') {
putchar(z);
}
А зачем тебе отдельные переменные для символов? Нельзя сразу putchar('v');
Я бы вообще сделал таблицу замен - массив. Чтобы можно было просто написать
while (string != EOF) {
putchar(table[string])
string = getchar();
}
А еще я бы выделил этот алгоритм в функцию, принимающую всю строку сразу.
И тогда в main производил бы получение строки, обработки ее через функции и вывод строки результата.
P.s. а зачем тебе и iostream и stdio.h? iostream - это С++ библиотека. А еще переменная у тебя называется string, хотя по сути хранит один символ.