如何使输出功能将格式化输出写入屏幕和输出文件

时间:2017-06-28 02:22:48

标签: c++ arrays function if-statement iomanip

ExecuteNonQuery()

分数,最低,最高和平均分数的标题统计部分,然后是每个学生的详细信息 - 每行一个。

我坚持要输出到屏幕。我希望我的输出看起来像这样

string sql = @"INSERT my_table (field1, field2) VALUES (@value1, @value2);"

MySqlCommand cmd = new MySqlCommand(sql, connection);

// Execute
int rowsAffected = cmd.ExecuteNonQuery();
if (rowsAffected > 0)
{
    // Query was successful
}
else
{
    // Query *may* have been successful
}

2 个答案:

答案 0 :(得分:0)

也许您可以将ostream对象作为参数传入,然后使用该参数的名称替换函数中cout的所有出现。然后你可以运行两次函数

printReport(cout, other args);
printReport(outFile, other args);

(或设置调用自身的功能,这样您就不必每次都输入cout)。 这个方法的唯一问题是我看到你在函数内部抓取输入。如果你想使用上面的方法,你必须移动一些东西。相反,我会设置一个不同的函数,它接受一个字符串作为输入,并将所述字符串插入cout和你的文件。所以而不是必须写

cout<<"hi";
file<<"hi";

你可以做到

...
functionName("hi", outfile);
...
void functionName(string str, ostream outfile)
{
cout<<str;
outfile<<str;
}

希望这有帮助

答案 1 :(得分:0)

通常,以下函数可用于复制文件中的控制台输出。

#include <stdarg.h>     /* va_list, va_start, va_arg, va_end */

void print(FILE *f, char const *fmt, ...) {
    va_list ap;
    //Normal console print
    va_start(ap, fmt);
    vprintf(fmt, ap);
    va_end(ap);
    //Printing to file
    if (f != NULL) {
        va_start(ap, fmt);
        vfprintf(f, fmt, ap);
        va_end(ap);
    }
}

如果您只想要控制台输出,只需

即可

print(NULL, "%d\t%d\n", 1, 100);//include any needed C style formatting here

如果您希望将控制台输出保存到文件中,只需将适当的文件指针作为第一个参数传递。

FILE *fp = fopen("logfile.txt","a");
print(fp, "%d\t%d\n, 1, 100);//logs the console output to logfile.txt

控制台窗口格式也将保留在文本文件中。