gpt4 book ai didi

c++ - cout 输出乱码消息行而不是实际用户 cout 语句

转载 作者:行者123 更新时间:2023-11-28 01:43:16 34 4
gpt4 key购买 nike

这是我的头文件

#ifndef KINGDOM_H_
#define KINGDOM_H_

#include <string>
using namespace std;
namespace sict{
class Kingdom {
public:
char m_name[32];
int m_population;

};
void display(Kingdom& pKingdom);
}
#endif

这是我的cpp文件

#include <iostream>
#include <string>
#include "kingdom.h"

using namespace std;

namespace sict {

void display(Kingdom& pKingdom) {
cout << pKingdom.m_name << ", population " << pKingdom.m_population << endl;
}
}

这是我最后一个cpp文件

#include <iostream>
#include "Kingdom.h"

using namespace std;
using namespace sict;

void read(sict::Kingdom&);

int main() {
int count = 0; // the number of kingdoms in the array
Kingdom* pKingdom = nullptr;


cout << "==========\n"
<< "Input data\n"
<< "==========\n"
<< "Enter the number of Kingdoms: ";
cin >> count;
cin.ignore();

if (count < 1) return 1;


pKingdom = new Kingdom[count];
for (int i = 0; i < count; ++i) {
cout << "Kingdom #" << i + 1 << ": " << endl;
cin >> i;
cout << "Enter the name of the Kingdom: " << pKingdom[i].m_name;
cin >> pKingdom[i].m_name;
cout << "Enter the number people living in " << pKingdom[i].m_population << ": ";
cin >> pKingdom[i].m_population;

}
cout << "==========" << endl << endl;

// testing that "display(...)" works
cout << "------------------------------" << endl
<< "The 1st kingdom entered is" << endl
<< "------------------------------" << endl;
sict::display(pKingdom[0]);
cout << "------------------------------" << endl << endl;


delete[]pKingdom;
pKingdom = nullptr;
return 0;
}

// read accepts data for a Kingdom from standard input

void read(sict::Kingdom& kingdom) {

cout << "Enter the name of the Kingdom: ";
cin.get(kingdom.m_name, 32, '\n');
cin.ignore(2000, '\n');
cout << "Enter the number of people living in " << kingdom.m_name << ": ";
cin >> kingdom.m_population;
cin.ignore(2000, '\n');
}

当代码到达输入王国名称的部分时,它会提示用户回答,但在提示之前,它只是输出这样的乱码

https://i.imgur.com/MSSHgvz.png

此外,当它输入居住人数时,它还会在我输入有效数字之前输出“-842150451”。

有什么解决问题的猜测吗?

最佳答案

您的程序打印垃圾,因为变量(char[]int)没有初始化。实际行为未定义。要解决此问题,您可能应该向您的类添加一个构造函数并初始化变量。

进一步阅读:

另外,当您使用std::cin 让用户将王国名称输入到固定大小的字符数组中时,他们很容易产生缓冲区溢出。这通常是不可取的。请使用std::string相反。

不鼓励使用 using namespace std;。在头文件中尤其如此。

进一步阅读:

除非你有很好的理由,否则你通常不应该使用指针来动态分配对象或数组。如果需要在运行时分配数组,请使用 std::vector相反。

进一步阅读:

您可能应该为您的类添加 << 和 >> 运算符的重载。那时您不需要将这些成员公开。

进一步阅读:

关于c++ - cout 输出乱码消息行而不是实际用户 cout 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46324996/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com