首页 > 试题广场 >

编写一段程序。它接受两个命令行参数,第一个是一个字符,第二个

[问答题]
编写一段程序。它接受两个命令行参数,第一个是一个字符,第二个是文件名。要求程序只打印文件中包含给定字符的那些行。
说明:文件中的行通过行末的'\n'来识别。假设没有一行超过256个字符。您可能会想到使用fgets ( )。
推荐
下面是一种方法:
Macintosh上的C用户要记住使用console.h和ccommand ( )。
#include <stdio.h>
#include <stdlib.h>
/*  #include <console.h>  */        /*  对于Mac用户  */
#define BUF 256
int has_ch (char ch, const char * line);
int main (int argc, char * argv[ ])
{
FILE * fp;
char ch;
char line [BUF];
/*  argc = ccommand (&argv);  */     /*  对于Mac用户  */
if (argc != 3)
{
printf ("Usage: %s character filename\n", argv[0]);
exit (1);
}
ch = argv[1][0];
if ((fp = fopen (argv[2], "r")) == NULL)
{
printf ("Can't open %s\n", argv[2]);
exit (1);
}
while (fgets (line, BUF, fp) != NULL)
{
if (has_ch (ch, line))
fputs (line, stdout);
}
fclose (fp);
return 0;
}
int has_ch (char ch, const char * line)
{
while (*line)
if (ch == *line++)
return (1);
return 0;
}
fgets()函数与fputs()函数协同工作,因为fgets()在字符串中保留回车键所产生的换行符,而fputs()并不像puts()那样添加一个换行符。
发表于 2018-03-23 21:47:26 回复(0)