我正在尝试从文件中读取文本,然后写入另一个文件中有多少个大写和小写字符,以及有多少个数字。
double
但是,当我运行它时,它只是“崩溃”并且不会在output.txt文件中写入任何内容。
我错过了什么?
答案 0 :(得分:2)
由于您要比较字符,因此最简单的情况是使用面向字符的输入。该库提供了几个面向字符的输入函数(例如getchar()
(从stdin
读取)或getc
和fgetc
读取{{{ 1}})。这可以防止您在阅读后逐步检查每个字符串。
使用您的方法的简短示例如下。唯一的调整是包含一个三元运算符,它可以读取/写入作为程序参数给出的文件名(如果没有给出文件名,则来自默认的FILE* stream
和stdin
)。它只是防止硬编码文件中的文件名。要在stdout
和input.txt
上使用该计划,只需将该计划称为output.txt
:
./programname input.txt output.txt
示例输入文件
#include <stdio.h>
int main (int argc, char **argv)
{
int p, caps, low, num;
p = caps = low = num = 0;
FILE *fin, *fout;
/* read from filename argv[1] (default: stdin),
write to filename argv[2] (default: stdout) */
fin = argc > 1 ? fopen (argv[1], "r") : stdin;
fout = argc > 2 ? fopen (argv[2], "w") : stdout;
if (fin == NULL) {
fprintf (stderr, "input file open failed.\n");
return 1;
}
if (fout == NULL) {
fprintf (stderr, "output file open failed.\n");
return 1;
}
while ((p = fgetc (fin)) != EOF)
{
if ('a' <= p && p <= 'z') low++;
if ('A' <= p && p <= 'Z') caps++;
if ('0' <= p && p <= '9') num++;
}
fprintf (fout, "\n Lower: %d, Caps: %d, Numbers: %d\n\n", low, caps, num);
if (fin != stdin) fclose(fin);
if (fout != stdout) fclose(fout);
//system("pause");
return 0;
}
输出(读取/写入默认stdin / stdout)
$ cat ../dat/captnjack.txt
This is a tale
Of Captain Jack Sparrow
A Pirate So Brave
On the Seven Seas.
如果您还有其他问题,请与我们联系。