以下回复参考:皆我百晓生、券券喵儿等免费微信小程序作答:
从您提供的代码片段来看,您正在尝试使用 std::vector 来存储字符串和长整型数据,并在向 vector 中添加数据后调用 Save() 函数保存数据。您提到在 push_back 后出现乱码的问题,这可能是由于以下几个原因造成的:
- 输入格式问题:如果您输入的字符串中包含空格或特殊字符,并且在读取时使用了
cin >>,那么它可能只读取了空格之前的部分字符串,剩下的部分仍然留在输入流中。在后续操作中可能导致乱码问题。您应该使用 cin.getline() 或 cin >> spm.getline() 来读取包含空格的整行字符串。 - 编码问题:如果您正在处理文本文件,可能存在字符编码不匹配的问题。例如,如果程序以UTF-8编码读取数据,但保存的文件是以其他编码格式(如GBK)保存的,可能会出现乱码。确保您的程序使用的编码与文件一致。
- 内存问题:如果
vector 中的数据已经被其他地方的代码修改或覆盖,那么在使用之前可能会出现乱码。确保在使用之前数据的正确性。
针对上述问题,您可以尝试以下修改:
system("cls"); // 清屏命令,取决于您的操作系统
std::string spm; // 定义字符串变量spm
long long jjg; // 定义长整型变量jjg用于存储价格
// 使用getline读取包含空格的整行字符串
std::getline(std::cin, spm); // 修改这里,使用getline读取整行字符串
printf("请输入商品名:");
std::cin >> jjg; // 这里没有需要改动的地方
sj.jg.push_back(jjg); // 添加价格到vector中
sj.sp.push_back(spm); // 添加商品名到vector中
sj.sur.push_back(mmm.mz[zrzh]); // 添加其他数据到vector中(假设mmm和zrzh已定义)
Save(); // 保存数据到文件或其他地方(假设Save函数已定义)
system("cls"); // 再次清屏
printf("已成功!\n"); // 输出成功信息
system("pause"); // 暂停程序执行(取决于您的操作系统)
system("cls"); // 再次清屏(可选)
return 1; // 返回特定值(根据您的需求决定)
注意:请确保所有变量和函数(如 sj, mmm, zrzh, Save() 等)都已经正确定义和使用。此外,还要确保您使用的输入数据与预期的数据格式一致。