小编Rya*_*ang的帖子

C++ 未初始化的结构成员 - 字段不存在

我的 C++ 代码中有以下结构。

struct XYZ {
  double x;
  double y;
  double z;
};

struct Data {
  XYZ xyz_point;
  double item_1;
  double item_2;
  double item_3;
};
Run Code Online (Sandbox Code Playgroud)

在我的代码中,我创建了一个结构向量Data

std::vector<Data> data_vector;

for (i = 0; i < 5; i++) {
   Data data_point_1;
   data_point_1.xyz_point.x = 10.0;
   data_point_1.xyz_point.y = 11.0;
   data_point_1.xyz_point.z = 12.0;
   data_point_1.item_1 = 13.0;
   data_point_1.item_2 = 14.0;
   data_point_1.item_3 = 15.0;
   data_vector.push_back(data_point_1);
}
Run Code Online (Sandbox Code Playgroud)

代码构建成功,没有任何错误,但是在 CPP_Check 期间,我收到以下警告/错误。data_point_1没有该字段xy并且z

[test.cc:122]: (error: uninitStructMember) Uninitialized struct member: data_point_1.x
[test.cc:122]: …
Run Code Online (Sandbox Code Playgroud)

c++ cppcheck

4
推荐指数
1
解决办法
110
查看次数

如果前导 0 后的数字是 8 或 9,则 Scanf 不读取前导 0

我有一个非常奇怪的问题,它源于我一直在编写的 C++11 程序的错误。

请参阅以下代码:

long long a[1000];
int main(int argc, char * argv[]) {
    
    for(long long i = 0; i < 300; ++i) {
        scanf("%lli", &a[i]);
        std::cout << a[i] << std::endl;
    }
    
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

尝试输入12等我们得到的输出1\n2\n等等类似的预期。这也适用于001我们从哪里得到1\n0004我们从哪里得到这样的输入4\n

但是,当前导零后面的数字是 8 或 9 时,scanf()首先读取前导零,然后读取后面的数字。

例如:

输入:0009,输出:000\n9\n

输入:08,输出0\n8\n

输入:00914,输出00\n914\n

我已经做了一些测试,对于这些情况,似乎scanf()首先读取前导零,剩余的数字留在缓冲区中,这些数字在循环的第二次运行时被拾取。

有人可以暗示发生了什么吗?

我正在使用 …

c++ stdin scanf c++11

1
推荐指数
1
解决办法
55
查看次数

标签 统计

c++ ×2

c++11 ×1

cppcheck ×1

scanf ×1

stdin ×1