c语言如何循环运行程序?

c语言如何循环运行程序?,第1张

c语言中用于循环运行程序的结构有三种,分别是:

①for(表达式1表达式2表达式3){循环体}

    表达式1,是初始化条件,如i=0。

    表达式2,循环条件,满足就继续执行循环体,不满足就跳出循环。

    表达式3,这个一般是改变循环条件的地方,如i++。

参考代码:

#include<stdio.h>

int main()//for循环计算1到10累加和 

{

    int i,sum=0

for (i=0i<=10i++)

sum+=i

   printf("%d\n",sum)

    return 0

}

/*

运行结果:

55

*/

②while(表达式){循环体}

    表达式的值为真(非0)时, 执行循环体语句。

参考代码:

#include<stdio.h>

int main()//while循环计算1到10累加和 

{

    int i,sum=0

while(i<=10) {

sum+=i

i++

}

   printf("%d\n",sum)

    return 0

}

/*

运行结果:

55

*/

③ do{循环体} while(表达式);

    先执行循环中的语句,然后再判断表达式让清是否为真磨滑茄, 如果为真则继续循环;否则, 则终止循环。

参考代码:

#include<stdio.h>

int main()//do……while循环计算1到10累加和 

{

    int 瞎察i,sum=0

do{

sum+=i 

i++

} while(i<=10)

   printf("%d\n",sum)

    return 0

}

/*

运行结果:

55

*/

for()和while(TRUE)都是无限循环,只有break或者return跳出

PeekMessage不会阻塞,最后一个参数传PM_NOREMOVE,不会将消息从队列取出,可以用于检测消息队列是否有消息。有时候,当我们使用全局变量之类的方式进行线程间交互,PeekMessage很有用。

比如你用一个全局变量BOOL bStop表示线程是否停止,主线程bStop设为TRUE就是通知工作线程结束

if(PeekMessage(&iMsg,NULL,0,0,PM_NOREMOVE))

{

if(!GetMessage(&iMsg,NULL,0,0))

return iMsg.wParam

TranslateMessage(&iMsg)

DispatchMessage(&iMsg)

}

else

{

if (bStop)

break/*结束*/

}

追问:

我有一个程序是多线程,采用win32控制台程序编写,通过scoket对端口进行监听。

但是为了将程序最小化到托盘,采用了消息循环,但是不知道如何将监裤宽听的代码放到循环里,所以增加了一个线程专门用来监听。有没有更好的解决办法?

另外,消息循环放在主线程,对端口监听放在另一个线程里。采用上面哪个消息循环好。采用消息循环的目的是为了将窗口托盘化。

追答:

一般来说,你这种情况,主线程是界面线程,处理界面消息的,工作线程只用于网络相关 *** 作,你的问题只在于主线程,如何能够响应界面上点了最小化按钮,是吧?

GetMessage后,取出了消息保存在iMsg中,DispatchMessage(&iMsg)会根据iMsg结构体孝纯游保存的窗口句柄,去掉用对应的窗口消息处理函数,这个回调函数应该是你在注册窗口类时定义了的。在这个函数中,处理最小化消息。

最小化,是通过WM_SYSCOMMAND消息发送的,wParam等于SC_MINIMIZE时代表最小化巧销

for语句可以让你设定循环次数。类如for(i=0,i<100,i++){ 这里写你的程序},那就循环100次。while语句可尘迹以让你设定含兄虚条件,当达到这个条件就退出循环。例如do{程序}while(a=100)就是程序运行到a=100就退出谈燃。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12555317.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存