4、编写一个程序,不接受任何命令行参数或接受一个命令行参数。如果有一个参数,将其解释为文件名;如果没有参数,使用标准输入(stdin)作为输入。假设输入完全是浮点数。该程序要计算和报告输入数字的算数平均值。
程序代码如下:
#include <stdio.h>
#include<stdlib.h>
int main(int argc,char *argv[])
{
FILE * fp;
double d1;
int num = 0;
double sum = 0.0;
if(argc > 2)
{
printf("usage: %s + filename",argv[0]);
}
/*当无命令行参数时,指定标准输入为输入源*/
else if(argv[1] == NULL)//这里也可以写argc == 1
{
fp = stdin;
printf("Enter the number(EOF to end input):\n");
}
else if(argc == 2)
{
if((fp = fopen(argv[1], "r")) == NULL)
{
printf("Can not open %s.\n", argv[1]);
exit(EXIT_FAILURE);//需要引入stdlib.h头文件
}
}
while(fscanf(fp,"%lf",&d1) == 1)//还可以加个条件 && !feof(fp),当然加了更利于阅读,不加也不碍事。
{
num++;
sum = sum + d1;
}
if(num > 0)
{
printf("程序读取了了%d次浮点数,其平均值为%.6lf",num,sum/num);
}else{
printf("There is no number.\n");
}
return 0;
}
程序运行截图:
成功情况:(其余情况经测试都没问题)
5、编写一个程序,接受两个命令行参数。第一个参数是字符,第二个参数是文件名。要求该程序只打印文件中包含给定字符的那些行。
注意:C程序根据’\n’识别文件中的行。假设所有行都不超过256个字符,你可能会想到用fgets()。
解法一:
程序代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 256
int main(int argc,char *argv[])
{
FILE *fp;
int lineNum = 0;
char line[SIZE];
if(argc != 3)
{
printf("usage:%s character filename",argv[0]);
exit(EXIT_FAILURE);
}
else if(strlen(argv[1]) != 1)
{
printf("The second parameter should be a char.\n");
exit(EXIT_FAILURE);
}
else if( (fp = fopen(argv[2],"r")) == NULL )
{
printf("Can't open %s file",argv[2]);
exit(EXIT_FAILURE);
}
while( fgets(line,256,fp) != NULL )
{
lineNum++;
if(strchr(line,*argv[1]) != NULL)
{
printf("第%d行存在%c字符,该行输出为:%s",lineNum,*argv[1],line);
}
}
return 0;
}
运行截图:
另一种解法:(不用strchr()函数)
解法二:
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 256
int main(int argc,char *argv[])
{
FILE *fp;
int lineNum = 0;
char line[SIZE];
if(argc != 3)
{
printf("usage:%s character filename",argv[0]);
exit(EXIT_FAILURE);
}
else if(strlen(argv[1]) != 1)
{
printf("The second parameter should be a char.\n");
exit(EXIT_FAILURE);
}
else if( (fp = fopen(argv[2],"r")) == NULL )
{
printf("Can't open %s file",argv[2]);
exit(EXIT_FAILURE);
}
while( fgets(line,256,fp) != NULL )
{
lineNum++;
//下面不一样
char *p = line;
while(*p != '\0'){
if(*(p++) == *argv[1] )
{
printf("IN THE %dth LINE FOUND %c :WHICH IS %s",lineNum,*argv[1],line);
break;
}
}
}
return 0;
}
运行截图:
问题2的两个程序所用的同一个a.txt文件内容如下:
aaaaaaaaaaaaaaaaaabaaa
cccccccccccccccccccccc
ssssssssssssssssssssss
dddddddddddddddddddddb
eeeeeeeeeeeeeeeeeeeeee
tttttttttttttttttttttb
图片: