读书人

VC++循环基础有关问题

发布时间: 2013-04-09 16:45:09 作者: rapoo

VC++循环基础问题
unsigned char *p,i,tmp1[100],tmp2[100];
for(i=0;i<300;i++){
nRet=SerRecv(atol((const char *)p),tmp1,850);
//pedt->SetWindowText((const char *)tmp1);

}
pedt->SetWindowText((const char *)tmp1);
我这里要循环调用SerRecv函数多次,然后把多次调用这个函数得到的tmp1值一起显示在文本框怎么处理?
[解决办法]
循环调用SerRecv函数多次, 这倒也没什么大的关系
首先要确定函数内部的实现,其次是参数的传递。
问题是SetWindowText函数在循环里被调用,程序运行完后,你只能看到到for循环最后一次的值了。

“然后把多次调用这个函数得到的tmp1值一起显示在文本框怎么处理?”
不知道你的业务逻辑是什么需求,所以按照字面的理解:
1,可不可以换个控件?
2,可不可以在for循环里把tmp1值存储到临时变量里,最后一起用文本框以多行方式显示。
[解决办法]


CString str;
TCHAR *p,i,tmp1[100],tmp2[100];
for(i=0;i<300;i++){
nRet=SerRecv(atol((const char *)p),tmp1,850);
str.Append(tmp1);
//pedt->SetWindowText((const char *)tmp1);

}

要注意宽字符问题
[解决办法]
每次接收到的数据长度知道么,如果知道,那就在temp1后面加上一个帧长的变量,然后每次循环,都在temp1后面添加,这样temp1里最后跳出循环就是存的多次循环后的数值了

[解决办法]
引用:
C/C++ code?12345678CString str; TCHAR *p,i,tmp1[100],tmp2[100]; for(i=0;i<300;i++){ nRet=SerRecv(atol((const char *)p),tmp1,850); str.Append(tmp1); ……

这要写貌似略有问题

CString str;
TCHAR *p,i,tmp1[100],tmp2[100];
for(i=0;i<300;i++)
{
nRet=SerRecv(atol((const char *)p),tmp1,850);
temp1[nRet]='\0';
str.Append(tmp1);
}

应该补一行~
[解决办法]
引用:
引用:每次接收到的数据长度知道么,如果知道,那就在temp1后面加上一个帧长的变量,然后每次循环,都在temp1后面添加,这样temp1里最后跳出循环就是存的多次循环后的数值了知道。这是做的串口通信,每次只接受到一个数据。不过你说的不太懂,我对C不熟悉


串口通信最好自己写个解析串口报文的函数(不知道你的SerRecv函数有没有做过这个功能),把串口报文组装成一个整的报文,然后搞个tmp2,连接字符串。

读书人网 >C++

热点推荐