如果我有一个整数数组,我想输出到文本文件..
void output()
{
for (i=0; i<10; i++)
printf("%d ", values[i]);
}
如何使用以下方法将output()保存到文本文件?
void writeToFile()
{
file = fopen("file.txt","a+"); // apend file or create a file if it does not exist
fprintf(file,"%d", *missing parameter*); // write
fclose(file); // close file
printf("File created. Located in the project folder.\n", "");
}
答案 0 :(得分:4)
作为创建两个函数的替代方法(根据AareP's answer),您可以向output()
函数添加目标参数:
void foutput(FILE *dest, int values[])
{
int i;
for (i=0; i<10; i++)
fprintf(dest, "%d ", values[i]);
}
然后,您可以将原始output()
重新实现为一个简单的包装器:
void output(int values[])
{
foutput(stdout, values);
}
在这种情况下,这似乎不太有用,但我把它放在这里,因为当输出函数的逻辑更复杂时,这种通用模式会很有用。一般来说,最好将它保存在一个地方,而不是将其复制到多个函数中(这意味着你只需要在一个地方修复bug,一方面)。
答案 1 :(得分:1)
添加其他人所说的内容:
您必须始终在fopen
之后检查错误,错误返回时为NULL
。
FILE *file = fopen("file.txt","a+");
if(!file) {
fprintf(stderr,"error opening file...exiting\n");
exit(1);
}
答案 2 :(得分:0)
只需创建两个函数:
void output()
{
for (i=0; i<10; i++)
printf("%d ", values[i]);
}
void output(FILE* file)
{
for (i=0; i<10; i++)
fprintf(file, "%d ", values[i]);
}
答案 3 :(得分:0)
如果您想重复使用输出功能,可以执行以下操作。 使用a_output函数,您将能够在控制台或任何其他输出流中打印结果。
#include <assert.h>
#include <stdio.h>
void a_output(FILE *fs, int *array, unsigned int array_s);
void a_output(FILE *fs, int *array, unsigned int array_s){
int i;
assert(fs != NULL);
assert(array != NULL);
for(i = 0; i < array_s ; i++){
fprintf(fs, "%d ", array[i]);
}
}
int main(int argc, char **argv)
{
int array[5] = {1, 2, 3, 4, 5 };
FILE *out;
if((out = fopen("output.txt", "w")) == NULL){
return -1;
}
/* Will "print" results in a file */
a_output(out, array, 5);
/* Will "print" results in console */
a_output(stdout, array, 5);
fclose(out);
return 0;
}