freopen再次出现,但仍然可以';I don’我一周后不看书 我在C++中有如下内容。

freopen再次出现,但仍然可以';I don’我一周后不看书 我在C++中有如下内容。,c++,cin,fseek,freopen,C++,Cin,Fseek,Freopen,我想多次读取一个文件,但失败了 虽然我再次打开后使用fseek移动到文件的头部,但我仍然只能读取一次。这是第二次,我一无所获 我真的很困惑 (看起来c的freopen可以工作,但我真的很想使用cin…) #包括 #包括 #包括 #包括 #包括 使用名称空间std; int main(){ 对于(int i=0;i>s0){ cin>>名称; cin>>文件名; CUT< P>混合C和C++是不推荐的。它在开始时起作用,但是它似乎在查找 STDIN < /C> >,它与CIN < /C> >不同步

我想多次读取一个文件,但失败了

虽然我再次打开后使用fseek移动到文件的头部,但我仍然只能读取一次。这是第二次,我一无所获

我真的很困惑

(看起来c的freopen可以工作,但我真的很想使用cin…)

#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int main(){
对于(int i=0;i>s0){
cin>>名称;
cin>>文件名;

CUT< P>混合C和C++是不推荐的。它在开始时起作用,但是它似乎在查找<代码> STDIN < /C> >,它与CIN < /C> >不同步,它总是在文件的末尾。因为你在C中做了所有的事情,所以这里有一个使用SCANF代替的版本:

int main(){
    char s0[256];
    char name[256];
    char filename[256];

    freopen("windmill02.mtl", "r", stdin);

    for (int i=0; i<2; i++) {
        fseek(stdin, 0, 0);

        while (!feof(stdin)) {
            scanf("%s", s0);
            scanf("%s", name);
            scanf("%s", filename);

            cout << name << " " << filename << endl;
        }
    }

    fclose(stdin);
    return 0;
}
intmain(){
char s0[256];
字符名[256];
字符文件名[256];
freopen(“windmill02.mtl”、“r”和stdin);
对于(int i=0;i为什么是frepoen stdin

您不应该使用这种方式来混合Cio和C++io

如果您需要读取外部文件,请使用fstream。freopen stdio在这里不会带来好处

而且,stdin永远不应该与fseek一起工作。fseek在物理上存在的文件上工作,但stdin/stdout实际上是一个虚拟文件,通常与管道或控制台设备关联,它们是连续的,不能查找到另一个位置。fseek如何响应取决于文件流属性,该属性依赖于平台,可能不会改变弗雷奥普给我打电话

我测试了您的代码,它在我的系统上运行良好。

c++方法

#include <iostream>
#include <fstream>
#include <string>

int main()
{
    const char *filenames[] = {"windmill02.mtl", "ke.txt"};
    std::string s0, name, fname;    

    for (const char **fptr = &filenames[0]; fptr != &filenames[2]; ++fptr)
    {
        std::fstream fin (*fptr, std::ios_base::in);
        while(fin >> s0 >> name >> fname)
            std::cout << name << " " << fname << std::endl;
        fin.close();
    }

    return 0;
}
#包括
#包括
#包括
int main()
{
const char*文件名[]={“windmill02.mtl”,“ke.txt”};
std::字符串s0,名称,fname;
对于(常量字符**fptr=&文件名[0];fptr!=&文件名[2];++fptr)
{
std::fstream fin(*fptr,std::ios_base::in);
而(fin>>s0>>名称>>fname)

STD::CUT我们在C++中,是不是有一个原因我们没有使用<代码> fStase和 SekKa\/Calp>之类的?文件的格式是什么?
#include <iostream>
#include <fstream>
#include <string>

int main()
{
    const char *filenames[] = {"windmill02.mtl", "ke.txt"};
    std::string s0, name, fname;    

    for (const char **fptr = &filenames[0]; fptr != &filenames[2]; ++fptr)
    {
        std::fstream fin (*fptr, std::ios_base::in);
        while(fin >> s0 >> name >> fname)
            std::cout << name << " " << fname << std::endl;
        fin.close();
    }

    return 0;
}