我正在试着用不同的 colored颜色 打印所有客户.在控制台中,未显示为正常白色的"已阻止"状态和状态为"已阻止"的状态应以红色打印出来.然而,我有一些格式,如‘-’他们破折号,我不能来他们,这意味着我想打印出被阻止的客户从单词‘阻止’的红色,直到最后一个em虚线,而不是‘日期注册:’像现在发生.

           BLOCKED
         Client ID: 05300
—————————————————————————————————————
Name: ABC
—————————————————————————————————————
Last: DEF
—————————————————————————————————————
Date of reg: 22-12-2023 18:46:13   <-- this is where the color red ends
————————————————————————————————————  <-- but I want it to end here

//And this client is printed out in normal white color since he does not have status 'blocked'
        Client ID: 05796
—————————————————————————————————————
Name: ERT
—————————————————————————————————————
Last: TYU
—————————————————————————————————————
Date of reg: 22-12-2023 18:49:22
—————————————————————————————————————

我将输入的数据保存到如下文件中:

fprintf(file, "\n        Client ID: %05d\n", rand() % 10000);
fprintf(file, "—————————————————————————————————————\n");
fprintf(file, "Name: %s\n", name);
fprintf(file, "—————————————————————————————————————\n");
fprintf(file, "Last: %s\n", last);
fprintf(file, "—————————————————————————————————————\n");
fprintf(file, "Date of reg: %s\n", formatted_date);
fprintf(file, "—————————————————————————————————————\n");

然后我从上面读到:

    char line[100];
    bool blocked= false;
    rewind(file);
     
    printf("\nPRINTING OUT ALL CLIENTS:\n\n");
    while(fgets(line, sizeof(line), file))
    {
        if (strstr(line, "           BLOCKED") != NULL)
            blocked = true;

        
        if (blocked)
        {
            SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_INTENSITY);
            printf("%s", line);
        }
        else
        {
            SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_GREEN | 
            FOREGROUND_INTENSITY);
            printf("%s", line);
        }

        if (strstr(line, "Date of reg:") != NULL)  //here is the problem
        {  
            blocked= false;        
        } 
        /* if(strstr(line, "—————————————————————————————————————" != NULL)
               blocked = false; */  this does not help
    }
}

那么,我如何才能打印出红色到最后

推荐答案

当您达到Date of reg:行时设置一个变量,以指示您已到达客户端的末尾.然后在打印分隔线后判断此选项.

    while(fgets(line, sizeof(line), file))
    {
        if (strstr(line, "           BLOCKED") != NULL) {
            blocked = true;

        SetConsoleTextAttribute(hConsole, FOREGROUND_RED | (blocked ? 0 : FOREGROUND_GREEN) | FOREGROUND_INTENSITY);
        printf("%s", line);
 
        if (strstr(line, "Date of reg:") != NULL)
        {  
            end_of_client = true;        
        } 

        if(end_of_client && strstr(line, "—————————————————————————————————————" != NULL) {
            blocked = false;
            end_of_client = false;
        }

    }

C++相关问答推荐

如何将FileFilter添加到FileDialog GTK 4

C中是否有语法可以直接初始化一个常量文本常量数组的 struct 成员?

为什么GCC可以调用未定义的函数?

无法用C++编译我的单元测试

在一个小型玩具项目中实现终端历史记录功能

在C++中使用函数指针的正确语法

C中函数类型的前向声明

在为hashmap创建加载器时,我的存储桶指向它自己

S将C语言宏定义为自身的目的是什么?(在glibc标题中看到)

C指针概念分段故障

为什么用非常数指针变量改变常量静态变量时会出现分段错误?

Boyer Moore算法的简单版本中的未定义行为

这段代码用于在C中以相反的顺序打印数组,但它不起作用

计算SIZE_MAX元素的长数组的大小

我正在使用c学习数据 struct ,在学习堆栈时,我试图将中缀转换为后缀,并编写了这段代码.代码未给出输出

在C中使用字符串时是否不需要内存分配?

既然我们在 if 中将 int 的值更改为 10,为什么在第二个 fork 后,子进程及其创建的子进程都会打印 33 ?

将数组中的所有元素初始化为 struct 中的相同值

为什么写入关闭管道会返回成功

如何让 unlinkat(dir_fd, ".", AT_REMOVEDIR) 工作?