VSC++中变量的问题?

DDSMJB 2018-01-22 10:31:04
各位大神,楼主小白,想请教一个问题,有个程序打印出的数据是printf("#%d -> %.6f, %.6f, %.6f, %.6f\n", dev_index, qx, qy, qz, qw) 我想把第一位的%d变成我接收传感器的dev.address。源程序部分如下:
#include <string>
#include <vector>
#include <list>
#include <iterator>
#include <iostream>
#include <functional>

#include "libSuyunBleInvoker.h"
#include "SUYUN_WBLE_Callback.h"

libSuyunBleInvoker invoker;

std::vector<BTDevice> scaned_devices;

int connect_index = 0;

void OnScanResult( std::list<BTDevice>* devices ) {
// clear out of date devices infomation
scaned_devices.clear();

// save devices infomation
std::copy( devices->begin(), devices->end(), std::back_inserter( scaned_devices ) );

// print device infomation
if( scaned_devices.size() > 0 ) {
printf( "Scan Result:\n" );

for( auto & dev : scaned_devices ) {
printf( "Device: %s, %s, %ddBm\n", dev.name, dev.address, dev.rssi );
}

// connect sensor one by one, when connected or not, it calls OnEvent function
invoker.connect_device( connect_index, scaned_devices[ connect_index ].address );
} else {
printf( "No device found.\n" );
}
}

// print quaternion components received from ble sensor
void OnData( const int dev_index, float qx, float qy, float qz, float qw, const int sr, const int bp ) {
printf( "#%s -> %.6f, %.6f, %.6f, %.6f\n", dev.address, qx, qy, qz, qw );
}

这个我手动改成了printff( "#%s -> %.6f, %.6f, %.6f, %.6f\n", dev.address, qx, qy, qz, qw ),不过报错dev.address未定义。。
...全文
470 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgl7903 2018-01-22
  • 打赏
  • 举报
回复
注意作用域 scaned_devices 已经是全局变量了, 函数中传入了 dev_index, 就可以取到 BTDevice *pDev = &scaned_devices[dev_index]; pDev->XXXXX
csulizhang 2018-01-22
  • 打赏
  • 举报
回复
有,把dev定义成全局变量赋值,或者是吧dev.address的值传进OnData方法中打印出来
DDSMJB 2018-01-22
  • 打赏
  • 举报
回复
引用 1 楼 zhangli00 的回复:
你所谓的dev,只是在方法OnScanResult里面定义的局部变量,而且还是在for循环里面才能使用的变量,OnData这个方法里面根本就没有dev这个东西,更不用说dev.address了,
那就没有别的办法可以在打印数据中添加dev.address了吗?
csulizhang 2018-01-22
  • 打赏
  • 举报
回复
你所谓的dev,只是在方法OnScanResult里面定义的局部变量,而且还是在for循环里面才能使用的变量,OnData这个方法里面根本就没有dev这个东西,更不用说dev.address了,
DDSMJB 2018-01-22
  • 打赏
  • 举报
回复
引用 8 楼 zgl7903 的回复:
f = fopen("d:\\mydata.txt", "w+"); //追加模式
fseek(f, 0, SEEK_END); //移动到文件尾部
for (i = 0;i<N;i++) { …… }
fclose(f);


打印数据设定是这样。接收数据是没有顺序的。
DDSMJB 2018-01-22
  • 打赏
  • 举报
回复
引用 8 楼 zgl7903 的回复:
f = fopen("d:\\mydata.txt", "w+"); //追加模式
fseek(f, 0, SEEK_END); //移动到文件尾部
for (i = 0;i<N;i++) { …… }
fclose(f);

老师,还是有问题,我最终想保存的,是5个传感器的数据,每个前面都有各位的地址,每保存一次就刷新一次,而我的打印和保存也不是按顺序的,所以保存的时候是等5个传感器的数据都到了,保存一次

zgl7903 2018-01-22
  • 打赏
  • 举报
回复
f = fopen("d:\\mydata.txt", "w+"); //追加模式 fseek(f, 0, SEEK_END); //移动到文件尾部 for (i = 0;i<N;i++) { …… } fclose(f);
DDSMJB 2018-01-22
  • 打赏
  • 举报
回复
引用 6 楼 zgl7903 的回复:
void OnData( const int dev_index, float qx, float qy, float qz, float qw, const int sr, const int bp ) { BTDevice *pDev = &scaned_devices[dev_index]; printf( "#%s -> %.6f, %.6f, %.6f, %.6f\n", pDev->address, qx, qy, qz, qw ); }
谢谢您的回复,是这样,我现在完整的程序是要把打印的数据保存到txt中,5个传感器的数据,程序我写成这样,打印的数据没问题,每个传感器数据前面都是所对应的地址,就是保存到txt中的数据乱了,您能帮我看看么?。 void OnData(const int dev_index, float qx, float qy, float qz, float qw, const int sr, const int bp) { FILE *f; const int N = 5; static float nqx[N]; static float nqy[N]; static float nqz[N]; static float nqw[N]; int i; printf("#%d -> %.6f, %.6f, %.6f, %.6f\n", dev_index, qx, qy, qz, qw); if (0 <= dev_index && dev_index<N) { nqx[dev_index] = qx; nqy[dev_index] = qy; nqz[dev_index] = qz; nqw[dev_index] = qw; f = fopen("d:\\mydata.txt", "w"); for (i = 0;i<N;i++) { fprintf(f, "%d %.6f, %.6f, %.6f, %.6f\n", i, nqx[i], nqy[i], nqz[i], nqw[i]); } fclose(f); } else { printf("#%d not in [0..%d]!\n", dev_index, N - 1); } }
zgl7903 2018-01-22
  • 打赏
  • 举报
回复
void OnData( const int dev_index, float qx, float qy, float qz, float qw, const int sr, const int bp ) { BTDevice *pDev = &scaned_devices[dev_index]; printf( "#%s -> %.6f, %.6f, %.6f, %.6f\n", pDev->address, qx, qy, qz, qw ); }
DDSMJB 2018-01-22
  • 打赏
  • 举报
回复
引用 4 楼 zgl7903 的回复:
注意作用域 scaned_devices 已经是全局变量了, 函数中传入了 dev_index, 就可以取到 BTDevice *pDev = &scaned_devices[dev_index]; pDev->XXXXX
谢谢您,因为我之前没接触过C++,所以请问下您的这个语句完整写应该是什么,要加在哪里,对于小白来说。有些吃力。
内容概要:本文研究了一种针对四机并联孤岛微电网的协同控制策略,通过集成DoS攻击模拟、分布式二次控制、下垂控制与事件触发式负荷控制,旨在实现微电网在遭受网络安全威胁等异常工况下的电压与频率恢复以及有功/无功功率的精确共享分配。基于Simulink平台构建了完整的微电网仿真系统,包含多台分布式发电单元(DG),采用下垂控制实现无需通信的功率自主分配,并引入分布式二次控制以补偿由下垂特性引起的电压和频率偏差,从而提升电能质量。为进一步降低通信负担并提高系统效率,设计了事件触发机制,仅在必要时刻进行信息交互。研究重点在于多时间尺度下的协同控制架构设计,全面验证了该策略在正常运行与遭受DoS攻击等扰动情形下的稳定性、鲁棒性与恢复能力。; 适合人群:具备电力系统、自动控制理论基础,熟悉Simulink/Matlab仿真工具,从事微电网、分布式能源、智能电网及相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①研究孤岛微电网电压频率恢复与功率均分的多时间尺度协同控制机制;②分析DoS网络攻击对微电网控制性能的影响及其应对策略;③掌握事件触发控制在减少通信开销的实际应用方法;④复现并拓展具备网络安全防护能力的高级微电网控制算法仿真模型。; 阅读建议:此资源以Simulink仿真实现为核心,建议读者结合现代控制理论与网络安全知识,逐步搭建系统模型,重点关注控制器参数整定、事件触发阈值设计及DoS攻击注入方式,通过对比实验深入理解控制策略的有效性与鲁棒性。

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧