freopen再次出现,但仍然可以';I don’我一周后不看书 我在C++中有如下内容。
我想多次读取一个文件,但失败了 虽然我再次打开后使用fseek移动到文件的头部,但我仍然只能读取一次。这是第二次,我一无所获 我真的很困惑 (看起来c的freopen可以工作,但我真的很想使用cin…)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> >不同步
#包括
#包括
#包括
#包括
#包括
使用名称空间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;
}