C++错误向量无法正确输出
C++ Error Vector not outputting correctly
我正在编写一个程序,我只是创建一个有计算机的实验室,我只是想让它有三个没有计算机的实验室(他们里面有空的)。这是我尝试获取的以下输出
Labs: Computer Stations:
1: 1: empty 2: empty 3: empty
2: 1: empty 2: empty 3: empty
3: 1: empty 2: empty 3: empty
这是我制作的代码:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
vector<vector<string>> labs;
vector<string> row;
int numrows=3;
int rowsize=3;
for (int i=1;i<numrows+1; i++){
for (int j=1;j<rowsize+1; j++)
row.push_back("empty");
labs.push_back(row);
}
cout<<"labs: "<<"Computer Stations:"<<endl;
int a=1,j=1;
for (int i=1;i<numrows+1; i++){
cout<<a<<": ";
while(j<rowsize+1){
cout<<j<<":"<<labs[i][j];
}
a++;
}
}
当我尝试运行代码时,我得到以下输出,该输出永远在循环中持续
labs: Computer Stations:
1: 1:empty1:empty1:empty1:empty1:empty1:empty1:empty1:empty1:empty1:empty1:empty1:empty1:empty1:empty1:empty1:empty1:empty1:empty1:
如果有人可以帮助解释我的逻辑出了什么问题,以及为什么我会得到奇怪的答案,并可能找到帮助修复我错误的解决方案,那么我将是一个快乐的 c++ 程序员!
问题是您没有增加输出循环中j
循环变量的值。 输出循环可以这样重写:
for (size_t i = 0 ; i < labs.size(); ++i)
{
cout << i + 1 <<": ";
for (size_t j = 0; j < labs[i].size(); ++j)
cout<< j + 1 << ":" <<labs[i][j];
}
这也可以在没有厕所的情况下重写但是,您可以采取一些措施来改进代码,以免犯这些错误。
首先,向量从索引 0 开始,而不是 1。 正如我的评论所建议的那样,除非您编写了一个处理偏移量为 0 的数组的类,否则编写代码来伪造这一点总是会导致代码库中某处的 off-by-1 错误。 我知道其他人会说"嘿,我做得没有错误",但我遇到过太多的情况(超过一半的时间),即使是经验丰富的程序员也会犯一个错误。
二、这段代码块:
vector<vector<string>> labs;
vector<string> row;
int numrows=3;
int rowsize=3;
for (int i=1;i<numrows+1; i++){
for (int j=1;j<rowsize+1; j++)
row.push_back("empty");
labs.push_back(row);
}
可以重写如下:
int numrows=3;
int rowsize=3;
vector<vector<string>> labs(numRows, vector<string>(rowsize,"empty"));
没有循环。 整个向量的大小可以调整为一行中所需的行数和列数。
第三,使用vector::size()
告诉你向量中有多少项——不要使用据称包含向量中项数的无关变量。 我见过很多情况,这些不必要的变量保存不正确的项目数,程序员使用这些错误的值。
相关文章:
- 输出错误,问题是找到总和5000位数字cpp
- 使用复制构造函数的程序输出错误
- 异或字符串加密/解密输出错误
- 在linux上使用g++输出错误,在windows上更正
- 使用递归函数 (c++) 将长字符串转换为整数时输出错误
- ECDSA 密钥对生成输出错误
- fscanf() 输出错误的值
- 输入 1024 后十进制到二进制转换的输出错误?
- 输出错误命令的条件语句
- cuSparse (cusparseDcsrgemm) 中的矩阵乘法输出错误的结果
- 为什么 du -sh 输出错误大小的内存映射文件
- VS2017 的输出错误,但 mingw 有效
- 如何使FFMPEG C 代码不输出错误消息
- 乘以时输出错误.这是我编译器中的错误吗?C
- 输出错误:两个不同编译器上的不同输出:Prime Cryptarithm USACO
- 为什么输出错误崩溃
- C++输入/输出错误
- 尝试用 c++ 制作一个简单的加法器.编译成功,但输出错误
- 当我使用此合并排序代码运行时,输出错误
- 递归功能输出错误的值