【发布时间】:2012-12-08 08:17:36
【问题描述】:
我正在尝试使用 freopen() 打印到文本文件和屏幕,但我只是实现了打印到文件。
我想知道是否有一种简单的方法可以将程序输出保存到文件并打印到屏幕上?因为我以另一种方式工作,但我最终不得不将每条语句打印两次。一个用于文件,另一个用于输出。
注意:我是 C++ 新手,我正在尝试为下学期的课程学习它,因此需要直接回答,因为我已经在网上查找过,并且找不到任何简单的解决方案的答案。
这是我目前所拥有的:
#include<iostream>
#include<time.h>
#include<stdlib.h>
#include<fstream>
using namespace std;
void menu(){
cout << "\t********************************************************\n"
<< "\t* Welcome to slot machine. *\n"
<< "\t* Would you like to play? (1 to play, 2 not to play) *\n"
<< "\t********************************************************\n\n";
return;
}
void update(int arr[], int &token) {
if (arr[0]==arr[1] && arr[1]==arr[2]) {
token+=4;
cout << "You win\n\n";
} else if (arr[0]==arr[1] || arr[1]==arr[2] || arr[0]==arr[2]) {
token+=1;
cout << "You got two out of three\n\n";
} else {
token-=1;
cout << "You lose\n\n";
}
}
int main() {
freopen("file.txt", "w", stdout);
int x, arr[3], token=4;
srand(time(0));
menu();
cin >> x;
while(token!=0) {
cout << "You have " << token << " tokens\n\n"
<< "Pull? (1 to pull, 2 not to pull)\n\n";
cin>>x;
if(x==1) {
for(int i=0; i<3; i++) {
arr[i]=1+rand()%10;
}
cout << "\t\t";
for(int j=0; j<3; j++) {
cout << arr[j] << " ";
}
cout << "\n\n";
update(arr,token);
}
else{
cout << "OK\n";
}
}
cin.get();
return 0;
}
【问题讨论】:
-
+1 表示格式正确的问题。
-
你仍然需要写两次。 freopen(..., stdout) 将用 freopen() 的第一个参数的文件(句柄)替换 stdout 的当前目标。 C/C++ 中的文件(或流)只能去一个地方。作为初学者,我不确定是否有一种简单的方法可以编写输出到两个地方的代码。我这样做的方法是实现我自己的 ostream 变体,它一次写入两个地方。但这不是初学者编码。