web-dev-qa-db-ja.com

Cでファイルに印刷する

すでに作成した空の_.txt file_に印刷するにはどうすればよいですか?

すでに結果をコンソールに出力しましたが、_"Output.txt"_という名前のファイルに出力したいと思います。うまくいかなかったいくつかのことを試しましたが、特にprintDictionary()というファイルに印刷するために重複したprintDictionaryToFile()を作成する方が簡単だったと思います。しかし、私はそれを行う方法に少し迷っています。誰かが私が間違っていた場所で私を修正できますか?ファイルへの出力用に、_*out_という追加のFILE型をすでに追加しました。

_#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <stddef.h>

#define PUNC    " \t\n\r,;.:!()[]{}?'\""
typedef struct node node;

typedef struct node {
    char *Word;
    int count;
    node *left;
    node *right;
} node;


void insert(node ** dictionary, char * Word) {
    int result;
    node * entry;

    if (Word == NULL || dictionary == NULL)
        return;
    if (*dictionary == NULL) {
        entry= (node *) malloc(sizeof(node));
        strcpy( entry->Word= (char *) malloc(strlen(Word) + 1), Word);
        entry->left= entry->right= NULL;
        entry->count= 1;
        *dictionary= entry;
        return;
    }
    result = strcmp(Word, (*dictionary)->Word);
    if ( result < 0 )
        insert(&(*dictionary)->left, Word);
    else if (result > 0)
        insert(&(*dictionary)->right, Word);
    else
        ++(*dictionary)->count;

    return;
}


void printDictionary(node * dictionary) {
    if (dictionary == NULL)
        return;
    printDictionary(dictionary->left);
    printf( "%s = %d\n", dictionary->Word, dictionary->count);
    printDictionary(dictionary->right);

    return;
}


void printDictionaryToFile( node * dictionary ) {
    if (dictionary == NULL)
        return;
    printDictionaryToFile(dictionary->left);
    fprintf(out, "%s = %d\n", dictionary->Word, dictionary->count);
    printDictionaryToFile(dictionary->right);
    return;
}


void freeDictionary( node ** dictionary ) {
    if (dictionary == NULL || *dictionary == NULL)
        return;
    freeDictionary(&(*dictionary)->left);
    freeDictionary(&(*dictionary)->right);
    free((*dictionary)->Word);
    free(*dictionary);
    *dictionary= NULL;
    return;
}


int main( int argc, char *argv[] ) {
    FILE *fp, *out;
    out = fopen("Output.txt", "w");
    char b[1000], *s;
    node *dictionary= NULL;
    int i;

    for (i= 1; i < argc; ++i) {
        if ((fp = fopen(argv[i], "r")) == NULL) {
            fprintf(stderr, "File %s can not be opened.\n", argv[i]);
            continue;
        }
        for (s = fgets(b, sizeof(b), fp); s != NULL; s = fgets(b, sizeof(b), fp)) {
            char *Word;
            for (Word= strtok(b, PUNC); Word != NULL; Word = strtok(NULL, PUNC))
                insert(&dictionary, strlwr(Word));
        }
        fclose(fp);
    }
    printDictionaryToFile(dictionary);
    printDictionary(dictionary);
    freeDictionary(&dictionary);
    return 0;
}
_
7
Silent Phantom

fprintf() 関数を使用できます。これは、動作方法が printf() と非常によく似ています。

次に例を示します。

FILE *fp;
int myInt = 5;
fp = fopen("Output.txt", "w");// "w" means that we are going to write on this file
fprintf(fp, "This is being written in the file. This is an int variable: %d", myInt);
fclose(fp); //Don't forget to close the file when finished

ファイルの出力は次のようになります。

これはファイルに書き込まれています。これはint変数です:5

パラメータとしてwを使用してファイルを開くと、ファイルを開くたびにファイルのコンテンツが破棄されることに注意してください。

8
Natan Streppel