为什么我的C++;第一次输出后汉明码崩溃? 我刚开始学习C++。我已经开始编写创建汉明码的代码,但我仍然处于编写代码的最开始阶段。我测试了到目前为止我的代码,在要求用户“输入位数:”后,我的代码崩溃了。我希望能得到一些帮助,了解它为什么这样
为什么我的C++;第一次输出后汉明码崩溃? 我刚开始学习C++。我已经开始编写创建汉明码的代码,但我仍然处于编写代码的最开始阶段。我测试了到目前为止我的代码,在要求用户“输入位数:”后,我的代码崩溃了。我希望能得到一些帮助,了解它为什么这样做:)(顺便说一句,这段代码仍然不完整)为什么我的C++;第一次输出后汉明码崩溃? 我刚开始学习C++。我已经开始编写创建汉明码的代码,但我仍然处于编写代码的最开始阶段。我测试了到目前为止我的代码,在要求用户“输入位数:”后,我的代码崩溃了。我希望能得到一些帮助,了解它为什么这样,c++,hamming-code,C++,Hamming Code,为什么我的C++;第一次输出后汉明码崩溃? 我刚开始学习C++。我已经开始编写创建汉明码的代码,但我仍然处于编写代码的最开始阶段。我测试了到目前为止我的代码,在要求用户“输入位数:”后,我的代码崩溃了。我希望能得到一些帮助,了解它为什么这样做:)(顺便说一句,这段代码仍然不完整) #包括//标准库 #包括 #包括 #包括 无效消息输入汉明码(int,int*,int*); int main(){ int messageBits[20];//这是一个包含数据位的数组 int m;/
#包括//标准库
#包括
#包括
#包括
无效消息输入汉明码(int,int*,int*);
int main(){
int messageBits[20];//这是一个包含数据位的数组
int m;//数据位数
int r{0};//冗余位数
//用户输入中的位数
std::coutm;
//使用公式2计算冗余位数r^r访问gdb或Visual Studio中的调试器有助于回答标题中的问题。hammingCode[j]=-1;
是否j
始终小于m+n?messageBits大小为20,如果用户输入m>20,代码可能会崩溃,因为当您有一个从1开始的for循环时,messageBits[i];
几乎肯定是不正确的,因为它跳过了第0个条目,可能读取到数组之外。对于2的整数幂,您不应该使用pow(2,r)
pow()
是一个使用浮点运算的数学函数。只需使用1即可
#include <iostream> //standard library
#include <string>
#include <iomanip>
#include <math.h>
void messageIntoHammingCode(int , int* , int*);
int main() {
int messageBits[20]; //this is an array containing data bits
int m; //number of data bits
int r{0}; //number of redundant bits
//Number of bits in the user input
std::cout<<"Enter the number of bits: ";
std::cin>>m;
//Calculate Number of redundant bits r using formula 2^r<m+r+1
while(pow(2,r) < m+r+1){
r++;
}
//Length of the output message
int hammingCode[r+m];
/*Redundant Bits are added as follow:
r1 at position 2^0
r2 at 2^1
r3 at 2^2, etc.*/
//Initiliaze redudant bits to -1
for(int i{0};i<=r+m;i++){
int j = pow(2,i);
hammingCode[j] = -1;
}
//User inputs data bit
std::cout<<"Enter the Data Bits: ";
for(int i{1};i<=m;i++){
std::cin>>messageBits[i];
//place the bit into the hamming cde
messageIntoHammingCode(i,hammingCode, messageBits);
}
std::cout<<hammingCode;
}
void messageIntoHammingCode(int i, int hammingCode[], int messageBits[20]){
//PLace the given code in the rest of the bits
if(hammingCode[i]!=-1){
hammingCode[i] = messageBits[i];
}
}