Freopen множественный файл ввода

Я пробовал это

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

с name это символ «doc1.txt», «doc2.txt», …

но этот код только открыть «doc1.txt», кто-нибудь может мне помочь, пожалуйста?

-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 ++ (например, std::cin а также >>) с файлами C (например, stdin а также fscanf…).

Я настоятельно рекомендую вам потратить несколько часов на чтение дополнительной документации (не используйте заголовок, функцию или тип, не прочитав ее документацию) и книги. Ваш код жалок.

Таким образом, вы можете закодировать в С :

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 ++, это разные языки), вы просто используете станд :: 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 ++ 11 отличается от C99) и читайте больше документации. Кроме того, компилируйте все включенные предупреждения и отладочную информацию (например, g++ -std=c++11 -Wall -g для кода C ++ 11 или gcc -std=c99 -Wall -g для кода C99, если используется НКУ) а также использовать отладчик.

-1

Другие решения


По вопросам рекламы [email protected]