stdout
- поток, предназначенный для вывода.Вы не должны пытаться использовать его с fgets
.Использование с fgets
не сообщит, что находится на консоли.Возвращаемое значение от fgets
с stdout
, вероятно, будет нулевым указателем, указывающим на ошибку.
Стандарт C обеспечивает только поток ввода в stdin
, поток вывода в stdout
и поток вывода, предназначенный для сообщений об ошибках в stderr
.Эти потоки являются просто последовательностями символов.C не предусматривает их использование для проверки или управления окном консоли или терминала, за исключением последовательной печати простых сообщений.
Для взаимодействия с окном консоли или окна вам необходимо программное обеспечение, выходящее за рамки стандартного C, такое как curses программное обеспечение для Unix-подобных систем.
Кроме того, void main()
не является стандартным объявлением для main
.Для портативного использования это должно быть int main(void)
или int main(int argc, char *argv[])
.
if (str == EOF)
не является правильным утверждением, поскольку str
является массивом char
, но EOF
фактически является int
значение (это макрос, который расширяется до целочисленного константного выражения).При использовании в str == EOF
, str
будет преобразован из массива в указатель.Неправильно сравнивать указатель с int
.