老师要求做一个无符号大整数计算器,打算用vector容器。
vector在子函数中定义没有问题。但是在主函数定义传入子函数就出现了问题。
说vector超出了范围。
定义的子函数在.H文件中
#pragma once
#ifndef IO_H
#define IO_H
#include<iostream>
#include<string>
#include<vector>
//输入数组最大有效长度
constexpr auto MAX = 100;
using namespace std;
void IO( char a[], UnsignedInt UnintA);
void IO(char a[],UnsignedInt UnintA)
{
vector<int>iterator = UnintA.unint;
//cin >> a;
//记录输入的数据长度
int i = 0;
int max;
do {
if (a[i] != '\0')
{
i++;
}
else
{
break;
}
} while (i<MAX);
max = i;//数组长度已被记录
cout << max << endl;
//到这里程序执行无误!!!!!!!
//需要判断是否输入的是无符号大整数
i = 0;
while (i < max)
{
if ((a[i] != '0') && (a[i] != '1') && (a[i] != '2') && (a[i] != '3') && (a[i] != '4') && (a[i] != '5')
&& (a[i] != '6') && (a[i] != '7') && (a[i] != '8') && (a[i] != '9'))
{
cout << "您输入的数据有误,请检查后请重新输入。" << endl;
cout << "请输入更改后的数据:";
i = 0;
cin.clear();
break;
}
i++;
}
//i = 1; //临时判断
//数据进入vector容器当中
if (i != 0)
{
//UnsignedInt UnintA;
{
for (i = 0; i < max; i++)
{
iterator.push_back(a[i] - 48);
}
}
cout << endl;
/*
//数据导入检测
for (i = 0; i < max; i++)
{
cout << UnintA.unint[i];
}
*/
}
}
#endif // !IO_H
定义的UnsignedInt类
#pragma once
#ifndef BASE_H
#define BASE_H
#include<vector>
#include <string>
using namespace std;
class UnsignedInt
{
public:
//记录数字的ascll码值
//int unint[100];
vector <int> unint;
//记录数字正负值,由于输入都是无符号大整数,所有的标注初始化都是TRUE
bool Sign = true;
void unput()
{
}
};
主函数部分
#include "Base.h"
#include "IO.h"
#include<string>
#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
char chs[100];
cin >> chs;
UnsignedInt UnintA;
//UnsignedInt *p;
//p = &UnintA;
IO(chs, UnintA);
int i = 0, max = 100;
for (i = 0; i < max; i++)
{
cout << UnintA.unint[i];
}
}
然后就出现了感人的一幕
```
有想过指针代替类的地址,但是还是出现了相同的问题。是不是这么用类出现的问题。现在类是不是并没有在内存中开辟空间?
还请高人指点一二,鄙人不胜感激。
(1)IO函数对UnsignedInt实例,使用引用
(2)IO函数中,迭代器没有初始化
代码修改如下(修改的地方已在代码中标注):
#pragma once
#ifndef IO_H
#define IO_H
#include<iostream>
#include<string>
#include<vector>
//输入数组最大有效长度
constexpr auto MAX = 100;
using namespace std;
void IO( char a[], UnsignedInt &UnintA); //修改1:这里改成引用
void IO(char a[],UnsignedInt &UnintA)//修改1:这里改成引用
{
vector<int>::iterator it = UnintA.unint.begin(); //修改2:这里初始化为begin
//cin >> a;
//记录输入的数据长度
int i = 0;
int max;
do {
if (a[i] != '\0')
{
i++;
}
else
{
break;
}
} while (i<MAX);
max = i;//数组长度已被记录
cout << max << endl;
//到这里程序执行无误!!!!!!!
//需要判断是否输入的是无符号大整数
i = 0;
while (i < max)
{
if ((a[i] != '0') && (a[i] != '1') && (a[i] != '2') && (a[i] != '3') && (a[i] != '4') && (a[i] != '5')
&& (a[i] != '6') && (a[i] != '7') && (a[i] != '8') && (a[i] != '9'))
{
cout << "您输入的数据有误,请检查后请重新输入。" << endl;
cout << "请输入更改后的数据:";
i = 0;
cin.clear();
break;
}
i++;
}
//i = 1; //临时判断
//数据进入vector容器当中
if (i != 0)
{
//UnsignedInt UnintA;
{
for (i = 0; i < max; i++)
{
it->push_back(a[i] - 48); //修改3
it++;//修改4
}
}
cout << endl;
/*
//数据导入检测
for (i = 0; i < max; i++)
{
cout << UnintA.unint[i];
}
*/
}
}
#endif // !IO_H
main函数里修改如下:
int main()
{
char chs[100];
cin >> chs;
UnsignedInt UnintA;
//UnsignedInt *p;
//p = &UnintA;
IO(chs, UnintA);
int i = 0, max = 100;
vector<int>::iterator it = UnintA.unint.begin(); //修改1
for (i = 0; i < max && it != UnintA.unint.end(); i++) //修改2
{
cout << UnintA.unint[i];
}
return 0;
}
槽点满满