C++ 流C/C+中的随机数、符号、字符+;

C++ 流C/C+中的随机数、符号、字符+;,c++,random,struct,filestream,C++,Random,Struct,Filestream,大家好,我是新来的,对c/c++有点陌生,我通常不练习流,但当我尝试创建流时,打开用此代码创建的文件,我总是在创建的.txt文件中得到随机数、字符、符号和垃圾。 这样地: . 我看到的是随机符号,输入的是字符而不是数字,名称可以,因为它显示得很好,但有时当我写长名称时,它会写垃圾 你能帮我解决这个问题吗?代码如下: struct示例{ int代码; 字符名[20]; }sampl; int main(){ CUT< P>你将C++和旧C设备混合起来用于输入和输出。如果你坚持C++,则将有一个更

大家好,我是新来的,对c/c++有点陌生,我通常不练习流,但当我尝试创建流时,打开用此代码创建的文件,我总是在创建的.txt文件中得到随机数、字符、符号和垃圾。 这样地: . 我看到的是随机符号,输入的是字符而不是数字,名称可以,因为它显示得很好,但有时当我写长名称时,它会写垃圾

你能帮我解决这个问题吗?代码如下:


struct示例{
int代码;
字符名[20];
}sampl;
int main(){

CUT< P>你将C++和旧C设备混合起来用于输入和输出。如果你坚持C++,则将有一个更容易的时间。

首先,让我们用C++等价的替换结构:

struct sample {
    int code;
    std::string name;
};
现在,
name
可以根据需要容纳任意多的字符

我们现在将编写一个函数,它将输出一个<代码>示例<代码>到C++输出流:

std::ostream& write_sample(std::ostream& os, const sample& samp)
{
    os << samp.code << "\n" << samp.name; 
    return os;
}
write_sample(std::cout, samp);
现在,我们可以通过将
write_sample()
函数与
std::cout
一起使用来快速检查是否正确,这是一种输出流:

std::ostream& write_sample(std::ostream& os, const sample& samp)
{
    os << samp.code << "\n" << samp.name; 
    return os;
}
write_sample(std::cout, samp);
这应该重复您在控制台中输入的内容

改写文件,我们可以使用C++工具打开文件流:

std::ofstream outfile{"Hellothere.txt"};
现在,我们可以再次将我们的
write_sample()
函数用于此新流:

write_sample(outfile, samp);
当您的程序运行时,hellother.txt应该包含您输入的文本


作为最后一个(稍微高级一点的)操作,您可能希望将
write_sample()
函数重命名为
operatorUnrelated,
fflush(stdin);
-不要这样做。它在任何方面都不是标准的。并且
get(sampl.name)
-永远不要这样做,
获取
非常可怕,因为它的可恶性而被从标准库中删除。总之,请理解您正在将
示例
对象的全部内容写入您的文件,包括未设置的
名称
中的字节,以及
i的实现表示形式nt
在内存中。你的代码不执行格式化输出,因此你从中得到的正是你告诉它要做的;将
示例的内存表示转储到磁盘文件中。我读了很多次你的答案,但没有100%得到,但是的,我了解你,但我该如何解决这个问题?我应该更改
int code到
char code
,对吗?纠正我。或者你可以编辑我的代码,或者告诉我应该在那里写些什么来解决它,或者其他什么?我读了你的答案三遍,现在我完全理解了,谢谢你的帮助
outfile << samp;
#include <fstream>
#include <iostream>
#include <string>

struct sample {
    int code;
    std::string name;
};

std::ostream& operator<<(std::ostream& os, const sample& samp)
{
    return os << samp.code << "\n" << samp.name;
}

int main()
{
    using namespace std;

    sample samp;

    cout << "Enter code:\n";
    cin >> samp.code;

    cout << "Enter name:\n";
    cin >> samp.name;

    std::ofstream outfile{"Hellothere.txt"};
    outfile << samp;
}