2010-03-07 52 views
0

如果我有我想要輸出到一個文本文件中的整數數組..Ç - 輸出到文件

void output() 
{ 
    for (i=0; i<10; i++) 
     printf("%d ", values[i]); 
} 

我如何保存()的輸出使用下面的方法爲文本文件?

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

它是關於如何組合兩個函數來遍歷數組值? – stacker 2010-03-07 09:59:59

+0

不要在人們費力回答之後刪除你的問題。 – 2010-03-07 14:34:36

回答

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]); 
} 
+0

+1爲%d後的空白 – stacker 2010-03-07 10:05:52

+0

C不支持超載;-) – 2010-03-07 10:28:17

+0

-1。 C不支持重載。 第二個函數就夠了:「void output(FILE * file);」 如果你想打印到標準輸出,你可以使用第二個函數,如下所示:output(stdout); – 2010-03-07 10:39:04

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); 
} 

在這種情況下,這可能看起來不太有用,但我把它放在這裏,因爲當輸出函數的邏輯更加複雜時,這個通用模式會很有用。一般來說,最好將它保存在一個地方,而不是將其複製到多個函數中(這意味着您只需要在一個地方修復錯誤)。

1

添加到別人告訴:

你必須始終fopen之後檢查錯誤,這對錯誤返回NULL

FILE *file = fopen("file.txt","a+"); 
if(!file) { 
     fprintf(stderr,"error opening file...exiting\n"); 
     exit(1); 
} 
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; 
}