-1

我试过这个

...
for(int i=0;i<totalDoc;i++){
        freopen(name[i],"r",stdin);
        while(cin>>s!=NULL){doc[i]=doc[i]+s+" ";}
        fclose(stdin);
        ...
}

withname是一个字符 "doc1.txt", "doc2.txt", ...

但是,此代码仅打开“doc1.txt”,有人可以帮帮我吗?

4

1 回答 1

-1

你是用 C 编码还是用 C++ 编码?你必须选择!

您应该阅读freopen(3)的文档并使用它的结果。

   The freopen() function opens the file whose name is the string
   pointed to by path and associates the stream pointed to by stream
   with it.  The original stream (if it exists) is closed.

此外,您不应将 C++ I/O 流(例如std::cin>>)与 C 文件(例如stdinfscanf...)混合。

我强烈建议您花几个小时阅读更多文档(不要在未阅读文档的情况下使用任何标题、函数或类型)和书籍。你的代码很可怜。

所以你可以用C编码:

for(int i=0;i<totalDoc;i++){
   FILE*inf = freopen(name[i],"r",stdin); // wrong
   if (!inf) { perror(name[i]); exit(EXIT_FAILURE); }

但这在第二次迭代中不起作用(因为stdin第一次调用已关闭freopen),所以你真的想使用fopen,而不是freopen从该inf文件中读取。不要忘记在循环体fclose的末尾。for

顺便说一句,如果您使用 C++ 编写代码(并且您必须在 C 和 C++ 之间进行选择,它们是不同的语言),您只需使用std::ifstream,也许就像

for(int i=0;i<totalDoc;i++){
   std::ifstream ins(name[i]);
   while (ins.good()) {
     std::string s;
     ins >> s;
     doc[i] += s + " ";
   };
}

最后,选择您使用的语言和编码标准(C++11C99不同)并阅读更多文档。此外,在启用所有警告和调试信息的情况下进行编译(例如g++ -std=c++11 -Wall -g,对于 C++11 代码或gcc -std=c99 -Wall -g对于 C99 代码,如果使用GCC)并使用 debugger

于 2014-09-13T06:33:27.407 回答