C打印输入while和if循环打印两次

时间:2017-07-20 12:11:52

标签: c printf

我正在创建一个显示活动前景窗口的C程序,但是我遇到了一个问题,如主题中所提到的,它会打印两次所有字符串(%s,new_window)。我已经阅读了很多关于这个printf问题的话题,但它们都没有对我有用。这是我的代码

int main() {
    char window[256]= "hello";
    char new_window[256] = "hello";
    HWND handle = GetForegroundWindow();
    GetWindowText(handle, window, 256);
    //different
    while(1){
        HWND handle = GetForegroundWindow();
        GetWindowText(handle, window, 256);
        if(strcmp(window, new_window)) {
            strcpy(new_window,window);
            if (strcmp(window, new_window)){
                 printf("%s Active: \n", new_window);
                 fflush(stdout);

            }
            else {
             printf("%s Active: \n", window);
             fflush(stdout);
            }
        }
    }
}

当我切换窗口(这里是netbeans和firefox)时的输出示例:

    CLab - NetBeans IDE 8.2 Active: 
     Active: 
    ZeroDay - Mozilla Firefox Active: 
     Active: 
    CLab - NetBeans IDE 8.2 Active: 
     Active: 
    ZeroDay - Mozilla Firefox Active: 
     Active: 
    CLab - NetBeans IDE 8.2 Active:

我希望输出:

    CLab - NetBeans IDE 8.2 Active: 

    ZeroDay - Mozilla Firefox Active: 

    CLab - NetBeans IDE 8.2 Active: 

    ZeroDay - Mozilla Firefox Active: 

    CLab - NetBeans IDE 8.2 Active:

1 个答案:

答案 0 :(得分:1)

我真的不知道第二个strcmp(window, new_window)如何等于 0 ,就像你之前做strcpy一样。您似乎总是会进入else声明。

我认为问题在于,在进入第二个if strcmp(window, new_window)并打印出你想要的内容之后,你会在另一个循环中进行window = ""所以你打印两次“Active:”

尝试:

  
      
  1. 将第二个if更改为if( !strcmp(window, new_window) && strcmp(window, ""))
  2.   
  3. 删除其他。
  4.   

修改:删除了导致if条件错误的!

相关问题