C++ 流的fscanf类型函数?

C++ 流的fscanf类型函数?,c++,file-io,iostream,fstream,C++,File Io,Iostream,Fstream,我习惯于使用fscanf进行简单的文件输入,因为它使输入变得简单。我正在尝试迁移到streams,我希望能够做到这一点: fscanf(file, %d %s, int1, str1); 正如您所看到的,读取一个文件相对容易,将遇到的第一个int放入一个容器,然后将第一个字符串放入一个char*。我想要的是使用流函数对fstream执行此操作。这就是我用有限的知识得出的结论 while((fGet = File.get() != EOF)) { int x; int y;

我习惯于使用fscanf进行简单的文件输入,因为它使输入变得简单。我正在尝试迁移到streams,我希望能够做到这一点:

fscanf(file, %d %s, int1, str1);
正如您所看到的,读取一个文件相对容易,将遇到的第一个int放入一个容器,然后将第一个字符串放入一个char*。我想要的是使用流函数对fstream执行此操作。这就是我用有限的知识得出的结论

while((fGet = File.get() != EOF))
{
    int x;
    int y;
    bool oscillate = false;
    switch(oscillate)
    {
    case false:
        {
            x = fGet;
            oscillate = true;
            break;
        }
    case true:
        {
            y = fGet;
            oscillate = false;
            break;
        }
    }
}
基本上我想扫描一个文件,把第一个int放到x,第二个放到y


这是非常糟糕的,有几个原因,你可以告诉我,我从来没有真正使用过这个,但这是我所能想到的。有更好的方法吗?

要从一个流中读取两个整数,只需

int x, y;
File >> x >> y;
相当于

fscanf(file, "%d %s", &int1, str1);

并确保如果要检查读取是否工作,请将读取置于以下条件:

if (file >> x >> s)


或者随便什么。

要从一个流中读取两个整数,只需

int x, y;
File >> x >> y;
相当于

fscanf(file, "%d %s", &int1, str1);

并确保如果要检查读取是否工作,请将读取置于以下条件:

if (file >> x >> s)



或者随便什么。

为什么在你最初的描述中有一个int和一个char*,而在你的伪代码中有两个
int
s?@Matt,因为。真的是这样,哈哈。我只是觉得自己与众不同。@MooingDuck:虽然我大体上同意这个解决方案,但我想指出,如果声明了
str1
,那么你肯定想使用类似于
if(in>>int1>>std::setw(size)>>str1{…}
的东西。当然,使用
fscanf()
也有类似的问题,但我认为重要的是要注意,
char*
的输入本质上等同于
get()
,除非其大小是约束。@DietmarKühl:正确,我没能回忆起字符串参数是
char*
而不是
string
。Jcrack:使用
std::string
。为什么在最初的描述中有一个int和一个char*,而在伪代码中有两个
int
s?@Matt,因为。真的是这样,哈哈。我只是觉得自己与众不同。@MooingDuck:虽然我大体上同意这个解决方案,但我想指出,如果声明了
str1
,那么你肯定想使用类似于
if(in>>int1>>std::setw(size)>>str1{…}
的东西。当然,使用
fscanf()
也有类似的问题,但我认为重要的是要注意,
char*
的输入本质上等同于
get()
,除非其大小是约束。@DietmarKühl:正确,我没能回忆起字符串参数是
char*
而不是
string
。Jcrack:使用
std::string
。真的吗?有那么简单吗?这比我想象的要简单。Thanks@Jcrack:使用streams以默认方式读写比printf更容易。如果你想格式化。。。这要详细得多,但更容易理解。C++使编程更容易,比C更容易出错。那么>>操作符会自动为我键入cast吗?如果我需要它来将一组数字读入一个字符或流呢?这是怎么做到的?一个字符只能容纳一个数字,你这是什么意思?@moing,对不起。我的意思是把一个数字变成一个字符,或者把一堆数字变成一个字符串。真的吗?有那么简单吗?这比我想象的要简单。Thanks@Jcrack:使用streams以默认方式读写比printf更容易。如果你想格式化。。。这要详细得多,但更容易理解。C++使编程更容易,比C更容易出错。那么>>操作符会自动为我键入cast吗?如果我需要它来将一组数字读入一个字符或流呢?这是怎么做到的?一个字符只能容纳一个数字,你这是什么意思?@moing,对不起。我的意思是把一个数字变成一个字符,或者把一堆数字变成一个字符串。