C程序中访问命令行参数

C语言提供了与命令行参数的连接。一般情况下为了访问命令行参数,我们可以使用这样的代码:

#include<stdio.h>

int main(int argc,char *argv[])

{

............

}

        C语言中main()函数可以接受两个参数。argc参数表示参数的数量,它的值就是命令行的参数数量。argv参数表示参数向量,它是一个数组,数组元素是char类型的指针。这种类型的数组可以看成是字符串数组。数组中的各个元素按顺序指向用于执行程序的命令行的各个单词。因此,argv[0]是个指令命令名(即程序名) 本身的指针。下面通过例子说明命令行参数的用法,假设我们编写了程序,并把可执行代码放在cnt_letters文件中。命令行的内容如下所示:

       cnt_letters  chapter1 data1

       它以文件名chapter1和data1作为命令行参数调用cnt_letters 程序。这个程序应该从chapter1文件中进行读取,并写入到data1文件中。如果我们使用了不同的命令,如下所示:

       cnt_letters  chapter2  data2

       这个程序就是从chapter2文件进行读取,并把结果写入到data2文件中。在程序中,命令行中的3个单词分别是通过argv[0]、argv[1]和argv[2]这三个指针进行访问的。

       下面是程序的源代码:

#include<stdio.h>
#include<stdlib.h>
int main(int argc,char *argv[])
{
 int c,i,letter[26];
 FILE *ifp,*ofp;
 
 if(argc!=3){
  printf("/n%s%s%s/n/n%s/n%s/n/n",
  "Usage:  ",argv[0],"  infile  outfile",
  "The uppercase letters in infile will be counted.",
  "The results will be written in outfile.");
  exit(1);
 }
 ifp=fopen(argv[1],"r");
 ofp=fopen(argv[2],"w");
 for(i=0;i<26;++i){
  letter[i]=0;
 }
 while((c=getc(ifp))!=EOF){
  if(c>='A'&&c<='Z')
   ++letter[c-'A'];
 for(i=0;i<26;++i){
  if(i%6==0)
   putc('/n',ofp);
  fprintf(ofp,"%c:%5d  ",'A'+i,letter[i]);
 }
 putc('/n',ofp);
 return 0;
}

如果我们使用下面的命令行:

cnt_letters  chapter1 data1

这样程序将统计chapter1文件中大写字母的各数,并写入data1文件中。打开data1文件可可看到以下内容:

A:     0      B:    0      C:    0      D:    0  E:    0  F:    0  
G:    0      H:    0       I:    0        J:    0  K:    0  L:    0  
M:    0      N:    0      O:    0      P:    0  Q:    0  R:    0  
S:     0      T:    0      U:    0       V:    0  W:    0  X:    0  
Y:     0       Z:    0  

程序说明:

我们输入命令cnt_letters  chapter1 data1后,argv[0]指向字符串“cnt_letters”,argv[1]指向字符串"chapter",argv[2]指向字符串"data1",C系统自动完成这个任务。

getc()函数是个在stdio.h中定义的宏。它与getchar()类似,区别在于它接受一个FILE类型的指针为参数。当getc(ifp)被调用时,它从ifp所指向的文件读取下一个字符。标识符EOF表示文件尾(end-of-file)。它是一个在stdio.h中定义的符号常量,一般定义如下:

#define EOF (-1)

如果文件中不再有更多的字符,getc()就返回EOF这个值。putc()也是在stdio.h中定义的,与putchar()类似,区别是它的第二个参数是个FILE指针。第一个参数的值则按照字符格式写入到指定的文件中。

fprintf(ofp,"%c:%5d      ",'A'+i,letter[i]);

fprintf()与printf()类似,只是它的第一个参数是个FILE指针。当这个函数被调用时,它将写入到指定的文件中,而不是打印到屏幕上。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值