2014-09-13 4 views
-1

C++ Я попытался этоFreopen вход Multiple File -

... 
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», может кто-нибудь мне помочь?

+0

Является ли вышеупомянутый дрянной код даже компиляцией? –

+0

И вы забыли дать объявления 'name' и' doc' –

+0

И '' doc1.txt '' is * not * a 'char' constant (как' 'd'' is)! –

ответ

-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. 

Кроме того, вы не должны смешивать потоки O C++ I/(например, std::cin и >>) с C-файлов (например, stdin и fscanf ...).

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

Так что вы можете закодировать в 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.

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

Смежные вопросы