gpt4 book ai didi

C Printf in while 和 if 循环打印两次

转载 作者:行者123 更新时间:2023-11-30 19:08:25 24 4
gpt4 key购买 nike

我正在制作一个显示事件前台窗口的 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:

最佳答案

我真的不明白第二个 strcmp(window, new_window) 是怎么回事当您执行 strcpy 时,可能等于 0 之外的其他值就在它之前。看来你总是会进入else声明。

我认为问题是进入第二个if strcmp(window, new_window)后并打印你想要的内容,你再做一个循环,其中 window = ""所以你打印了两次“Active:”

尝试:

  1. Change the second if to if( !strcmp(window, new_window) && strcmp(window, ""))
  2. Delete the else.

编辑:删除了!这使得 if 条件错误

关于C Printf in while 和 if 循环打印两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45214336/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com