我正在尝试模拟32位的移位寄存器。但是我什至无法写文件,无论是输入还是输出。它只是运行文件并关闭。那里没有写任何东西。在这里尝试了一些解决方案,但到目前为止没有任何效果。输入的是这样的32位字符串
“ 00000000000000000000000000000000000011”。
输出应如下所示
“ 00000000000000000000000000001100”。
向左移动两位。我尚未完成转换,我想了解为什么它没有显示任何内容。
这很奇怪,我以相同的方式创建了32位多路复用,并且效果很好。
void deslocador::shift(std::vector<std::string> entrada)
{
std::ofstream shifter("shift_left2.tv", std::ofstream::out);
std::vector<std::string> saida;
if(shifter.is_open())
{
for(unsigned int i = 0; i < 3; i++)
{
saida[i] = entrada[i];
saida[i].erase(saida[i].begin());
saida[i].erase(saida[i].begin());
saida[i] += "00";
shifter << entrada[i] << "_" << saida[i] << std::endl;
}
}else
{
std::cout << "Couldn't open file!";
}
shifter.close();
}
答案 0 :(得分:3)
std::vector<std::string> saida;
这将实例化一个新向量。像所有新的向量一样,它完全是空的,并且不包含任何值。
for(unsigned int i = 0; i < 3; i++)
{
saida[i] = entrada[i];
这会为saida[0]
至saida[3]
分配四个值。不幸的是,正如我们刚刚发现的,saida
向量完全为空,不包含任何内容。这会尝试将新值分配给向量中不存在的值,因此这是未定义的行为,几乎可以保证会导致崩溃。
此外,没有尝试验证entrada
向量是否至少包含四个值,这将是未定义行为和崩溃的另一个原因。
尚不清楚所显示代码的意图是什么,因此不可能提供修复它的任何建议。代码说明与内容不符。目前尚不清楚“ 32位”与字符串向量之间可能存在或不具有四个值的关系。
唯一可以确定的是,由于程序由于未定义的行为而崩溃,因此没有输出。在向向量中的第i
个元素分配值之前,第i
个元素必须已经存在。在显示的代码中没有。这会导致不确定的行为并导致崩溃。
有多种方法可以在向量中放置新值。可以resize()
d向量,也可以push_back
()将新值向量化。目前尚不清楚在这种情况下应采取的措施,因此,有关其他信息和示例,请参阅C ++书,以便您可以进一步了解这两种方法(以及其他方法)的工作方式,从而可以决定自己想做什么。试图做。
答案 1 :(得分:0)
这就是我要做的工作!
void deslocador::shift(std::vector<std::string> entrada)
{
std::ofstream shifter("shift_left2.tv", std::ofstream::out);
std::vector<std::string> saida;
saida.resize(entrada.size());
if(shifter.is_open())
{
for(unsigned int i = 0; i < entrada.size(); i++)
{
saida[i] = entrada[i];
saida[i].erase(saida[i].begin());
saida[i].erase(saida[i].begin());
saida[i] += "00";
shifter << entrada[i] << "_" << saida[i] << std::endl;
}
}else
{
std::cout << "Couldn't open file!";
}
shifter.close();
}