此功能用' *'打印单词的长度。叫直方图。如何将结果保存到文本文件中?我试过但程序没有保存结果。(没有错误)
void histogram(FILE *myinput)
{
FILE *ptr;
printf("\nsaving results...\n");
ptr=fopen("results1.txt","wt");
int j, n = 1, i = 0;
size_t ln;
char arr[100][10];
while(n > 0)
{
n = fscanf(myinput, "%s",arr[i]);
i++;
}
n = i;
for(i = 0; i < n - 1; i++)
{
ln=strlen(arr[i]);
fprintf(ptr,"%s \t",arr[i]);
for(j=0;j<ln;j++)
fprintf(ptr, "*");
fprintf(ptr, "\n");
}
fclose(myinput);
fclose(ptr);
}
答案 0 :(得分:1)
我认为有两种方法可以解决这个问题:
如果使用命令行运行,请更改标准输出的输出位置
$&GT; ./histogram&gt; outfile.txt
使用&#39;&gt;&#39;将改变标准输出将写入的位置。 &#39;&gt;&#39;的问题是它会截断一个文件,然后写入该文件。这意味着如果之前该文件中有任何数据,它就会消失。只有程序写的新数据才会存在。
如果您需要将数据保留在文件中,则可以更改标准输出以附加&#39;&gt;&gt;&#39;如下例所示:
$> ./histogram >> outfile.txt
此外,&#39;&gt;&#39;之间不一定有空格。和文件名。我只是喜欢这样做。它看起来像这样:
$> ./histogram >outfile.txt
如果你对文件的写入是一次性的事情,那么改变标准可能是最好的方法。如果您每次都要这样做,那么将其添加到代码中。
您需要打开另一个文件。您可以在函数中执行此操作,也可以像读取文件一样将其传入。
使用&#39; fprintf&#39;写入文件:
int fprintf(FILE *restrict stream, const char *restrict format, ...);
您的程序可能会添加这些行以写入文件:
FILE *myoutput = fopen("output.txt", "w"); // or "a" if you want to append
fprintf(myoutput, "%s \t",arr[i]);
回答完整
我可能会讨论其他一些问题。
您的直方图功能没有返回标识符。 C会将其设置为&#39; int&#39;自动然后说你没有该函数的返回值。根据你提供的内容,我会添加&#39; void&#39;在函数名之前。
void histogram {
arr的第二组数组的大小可能很小。可以假设您正在读取的文件每个标记不超过10个字符,以在字符串的末尾包含空终止符[\ 0]。这意味着字符串中最多可以包含9个字符。否则,您将溢出该位置并可能弄乱您的数据。
修改强>
以上是在更改提供的代码之前编写的,现在包含第二个文件和fprintf语句。
我将指向打开输出文件的行:
ptr=fopen("results1.txt","wt");
我想知道你是不是想把#34; w +&#34;其中第二个字符是加号。根据手册页有六种可能性:
参数模式指向以其中一个开头的字符串 以下序列(可能后跟其他字符,如 如下所述):
r Open text file for reading. The stream is positioned at the
beginning of the file.
r+ Open for reading and writing. The stream is positioned at the
beginning of the file.
w Truncate file to zero length or create text file for writing.
The stream is positioned at the beginning of the file.
w+ Open for reading and writing. The file is created if it does
not exist, otherwise it is truncated. The stream is
positioned at the beginning of the file.
a Open for appending (writing at end of file). The file is
created if it does not exist. The stream is positioned at the
end of the file.
a+ Open for reading and appending (writing at end of file). The
file is created if it does not exist. The initial file
position for reading is at the beginning of the file, but
output is always appended to the end of the file.
因此,您似乎正在尝试打开文件进行读写。