C语言 打印到 C 中的文件
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/18950835/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Printing to a file in C
提问by Silent Phantom
How do I print to an empty .txt fileI already have created?
如何打印到.txt file我已经创建的空文件?
I already print the results to the console, and now I want to print to a file named "Output.txt". I've tried a couple of things that haven't worked, but I think it was easier to create a duplicate printDictionary()specifically for printing to a file called printDictionaryToFile(). I'm a little lost on how to do it though. Can anyone correct me on where I went wrong? I already added an extra FILEtype called *outfor my output to a file.
我已经将结果打印到控制台,现在我想打印到一个名为"Output.txt". 我尝试了一些没有用的东西,但我认为创建一个副本更容易,printDictionary()专门用于打印到名为printDictionaryToFile(). 不过,我对如何做到这一点有点迷茫。谁能纠正我哪里出错了?我已经为我的输出添加了一个额外的FILE类型*out到文件中。
#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;
}
回答by Natan Streppel
You can use the fprintf()function, which is quite similar to printf()in the way it works.
您可以使用该fprintf()功能,printf()它的工作方式非常相似。
Here is an example:
下面是一个例子:
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
The output on your file would be this:
您文件上的输出将是这样的:
This is being written in the file. This is an int variable: 5
这是被写入文件。这是一个 int 变量:5
Worth to mention that opening the file using was parameter will destroy the file's content every time you open it.
值得一提的是,w每次打开文件时,使用as 参数打开文件都会破坏文件的内容。

