Я пробовал это
...
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», кто-нибудь может мне помочь, пожалуйста?
Вы кодируете в 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, если используется НКУ) а также использовать отладчик.