Кажется, ваша фиктивная программа работает нормально и ведет себя так, как вы хотели, чтобы она работала в большинстве случаев.Возможно, есть ошибка в вашей реальной программе, но не в коде, который вы опубликовали.
Хотя многие из ваших тестов неверны.
./myprogram requiredparameter <<< echo 'y'
не запускает echo y и отправляет его на стандартный ввод.Это так же, как если бы вы запустили
echo ' ' |./myprogram requiredparameter echo 'y'
Так что ваша программа просто читает пробел.Если вы хотите сделать это с помощью оператора <<<
оболочки, это будет
./myprogram requiredparameter <<<$(echo 'y')
или просто
./myprogram requiredparameter <<<y
Обратите внимание, что после << не должно быть пробела.<там.</p>
Я бы посоветовал вам также попытаться отладить ваш код, чтобы вы могли видеть, что происходит, или добавить некоторую трассировку отладки, такую как:
ans = getchar();
printf("getchar() read character value %d\n", ans); // debug
if (ans == 'y') printf("Your answer was y");
Затем вы можете посмотреть ascii значение, которое вернул getchar.
Также запишите новую строку в ваших выражениях printf, поэтому измените
printf("Your answer was y");
на
printf("Your answer was y\n");
Таким образомвы можете видеть вывод сразу же, когда вы запускаете программу в терминале, иначе вывод из printf буферизуется и не отображается, пока вы не напечатаете новую строку или не вызовете fflush(stdout)
, или программа не завершится нормально.