我的矢量元素在每次输入后都会不断地改变自己
My vector elements keep changing themselves after each input
char* name = (char*)malloc(sizeof(char));
char* highscore = (char*)malloc(sizeof(char));
char* password = (char*)malloc(sizeof(char));
player* c = new player(name, highscore, password);
int i;
int j = 0;
int score = 0;
vector <player*> players;
vector <char*>* names = new vector <char*>;
vector <char*>* passwords = new vector <char*>;
vector <int> scores;
ifstream input;
input.open("user.csv");
do {
cout << "Welcome to Champion Yahtzeen";
cout << "Player Name Highest Scoren";
cout << "----------- -------------n";
while (input.good())
{
input >> *c;
players.emplace_back(c);
names->push_back(name);
score = atoi(highscore);
scores.push_back(score);
passwords->push_back(password);
j++;
}
这是我的代码,我知道为了输入到它中,我们必须扩展向量?至少从我读到的适合新字符的内容来看,我真的不知道如何修复它。我曾尝试将向量初始化为vector <player*> players;
,但这没有用,因为在每次输入后,它都会覆盖以前的指针,并将所有元素设置为输入。我该怎么解决这个问题?
您在任何地方都获得相同值的原因是,您只分配了一次存储内存,然后将相同的内存地址一次又一次地推送到向量中。
基本上,你总是只有一个对象。
要解决这个问题,您必须在循环中分配新对象,如下所示:
vector <player*> players;
vector <char*> names;
vector <char*> passwords;
vector <int> scores;
ifstream input;
input.open("user.csv");
cout << "Welcome to Champion Yahtzeen";
cout << "Player Name Highest Scoren";
cout << "----------- -------------n";
while (input) { //this is the proper way in c++ 11 and up
char* name = new char[MAX_NAME_LEN];
char* highscore = new char[MAX_SCORE_LEN];
char* password = new char[MAX_PASSWORD_LEN];
player* c = new player(name, highscore, password);
input >> *c;
players.emplace_back(c);
names.push_back(name);
int score = atoi(highscore);
scores.push_back(score);
passwords.push_back(password);
}
以下是对代码更改的解释:
除非你的作业中有一些奇怪的要求,否则向量不需要是指针,它们只需要包含指针。
我们在每个循环的开头分配新的对象,所以每次读取数据时,它都会进入内存中的一个新位置。
若必须使用
char *
,则应该定义常量(或宏(,如MAX_NAME_LEN
,以获得name
字段的最大长度
您的作业可能会为所有字段指定最大输入长度,以简化操作。while
循环中的条件只是流对象
从C++11开始,它覆盖到bool
的强制转换以返回true
,同时可以读取更多数据
如果您使用的是较旧的C++标准,请使用while (!input.eof())
,或者检查input >> *c
和break
的返回值(如果是false
(。如果您正在编写C++,则应该使用
new
来分配内存
尽管malloc
将正确工作,但它被认为是";C路";并且不鼓励在C++中使用它。
相关文章:
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 2D数组来自文本输入,中间有空格
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 检查输入是否不是整数或数字
- 将矩阵乘以我自己的输入的向量
- 尝试检查输入的文本与我自己的自定义答案
- 为什么左值不能改变自己。左值用户是什么意思?
- 类中的枚举在调用自己的函数时不会改变
- C++编写自己的输入操纵器
- 如何为我的语言编写自己的Windows输入工具软件
- 当我使用regasm时,所有参数都被键入为输入?这可以改变吗
- 如何输入矩阵样式的txt文件,而不是为C++定义我自己的int 2D数组
- 在 C/C++ 中滚动自己的键盘/输入系统
- 当我读取文件时,由于某种原因,它自己改变了文件中的位置
- 创建自己的输入蒙版
- c++在WinAPI中根据用户输入改变图像
- 每次我通过ifstream读取一个特定的输入时,输入就会改变,可能是int溢出
- Cuda内核不改变输入数组
- 整型在Visual Studio 2012 c++中改变自己的值
- 在不同的处理器中改变输入参数