определить, напечатано ли что-нибудь на консоли или нет - PullRequest
0 голосов
/ 29 апреля 2019

я пытаюсь определить, напечатано ли что-то на консоли или нет на C. Это правильный способ сделать это? или, если есть лучший способ, пожалуйста, просветите меня. спасибо.

#include<stdio.h>
#include<stdlib.h>

void main()
{
    char str[60];
    fgets(str,60,stdout);
    if (str == EOF)
    printf("theres nothing on the console");
    else printf("theres something printed on the console");
}

Я немного изменил этот код. но все же это не дает мне вывода

#include<stdio.h>
#include<stdlib.h>

int main()
{
    FILE *fp;
    fp = freopen("file.txt","w+", stdout);
    printf("hello");
    fclose(fp);
    fp = fopen("file.txt","r");
    if(feof(fp))
    printf("theres nothing on the console");
    else printf("theres something printed on the console");
    fclose(fp);
    return 0;
}

1 Ответ

0 голосов
/ 29 апреля 2019

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...