2012-09-23 75 views
0

我有聲明輸入流

ifstream myfile; 
myfile.open("input"); 

一個C++代碼,然後有一個像命令:

myfile.getline(inp,256); 

問:我怎樣才能修改myfile.open("input")使myfilecin代替"input"關聯?

我不想將所有myfile.getline命令更改爲cin.getline

聲明myfile=cin不能編譯。

回答

3

使用一個istream&參考代替:

std::istream& myfile(std::cin); 
2

分離出來成一個函數,並採取std::istream&作爲參數。然後您可以根據需要在std::cinmyfile上執行。

1

你可以把你的代碼放入一個引用std :: istream的函數,例如

void process_data(std::istream & istr) 
{ ... } 

然後你就可以調用這個函數都與任何的std :: ifstream的,並給std :: cin:

std::ifstream myfile; 
... 
process_data(myfile); 
process_data(std::cin); 
0

如果您在使用std::ifstream堅持,你可以更換基本std::istreamstd::streambufstd::ifstream過載rdbuf()所以你不能直接使用它):

std::ifstream file; 
if (use_cin) { 
    file.std::istream::rdbuf(std::cin.rdbuf()); 
}