下面这个程序是我几乎复制书上的程序,我想知道 问题一:“Usage: %s filename”是什么意思? 问题二:另外,argv[0]是文件名,argv[1]也是文件名,argv[0]这个文件名可以通过编译黑窗口看到,是以exe为扩展名,但是argv[1]到哪里去看呢? 应该说除了argv[0]外,我还输入了“qwev”与“rty”呢?应该说argv[1]为“qwev”才对呀? 问题三: if(argc != 2)是查看命令行是否有参数吗?为什么不用if(argc < 2)? #include "stdafx.h" #include "stdio.h" #include "stdlib.h" int main(int argc, char *argv[]) { char ch; FILE *fp; long count = 0; if(argc != 2) { printf("Usage: %s filename\n", argv[0]); exit(1); } fp = fopen(argv[1], "r"); if(fp == NULL) { printf("Can""t open %s", argv[1]); exit(1); } ch = getc(fp); while(ch != EOF) { count++; putc(ch, stdout); ch = getc(fp); } fclose(fp); printf("File %s has %d characters\n", argv[1], count); return 0; } |
|
10分 |
1、是告诉用户该程序的用法,需要带一个filename的参数;
2、因为你输入了qwev和rty两个参数,导致argc!=2; 3、可以用argc<2,但是不严谨,就如你2中输入了多的参数不会报错。 |
10分 |
1.“Usage: %s filename”就是当你输入出错的时候提醒用户正确的输入方法。。
2.argv[1]的确是“qwev”。。但argc == 3了。。在前边就退出了。。 3. if(argc != 2)是判断用户是否按设想的方式输入。。就是test.exe filename这样。。 |
但是程序的这部分似乎没有执行呀?
ch = getc(fp); while(ch != EOF) { count++; putc(ch, stdout); ch = getc(fp); } |
|
应该是把argv[1]输出不是吗?但是没有输出呀。
|
|
10分 |
VC6:
工程、设置、Debug、U程序变量:填写命令行参数。 VS20XX: 项目、属性、配置属性、调试、命令参数:填写命令行参数。 在这里“命令行参数”的内容你应该填写为一个存在的文件全路径,比如d:\mydir\myinput.txt |
当然,如果不在IDE中调试的话,你还可以在cmd窗口中输入以下命令:
假设你的代码编译后的可执行文件为d:\mydir\myprog.exe cd /d d:\mydir myprog myinput.txt |
|
不对,不对,我的两次输入导致argc==3,所以只会输出Usage: %s filename.这个我能理解。
我试着只输入一个参数qwev,会在DOS窗口中输出“Can””t open qwev”。 这个我也能理解。 我不能理解的是为什么最后一步输出没有执行。 |
|
看了zhao4zhong1的话,我再试试。
|
|
确实实现了输出。比如我在F盘建立了123.txt文本文件,在“工程、设置、Debug、U程序变量:填写命令行参数”中写入f:\123.txt,然后再编译确认能够输出了。
我还想问argv[0]这个文件名与argv[1]这个文件名有什么区别与联系呀?我的程序是保存在E盘中的,编译显示 |
|
10分 |
argv[0] 是你的执行程序名和路径
argv[1] 是你执行程序 后面填的第一个参数 以空格分隔 |
argv[0]不保证一定是全路径。 |
|
在我这个程序中,argv[1]好像必须输入一个文本文件名,否则执行到第一个if就会结束程序。
|
|
这个程序可以计算一个文本文档有多少个字符,我想问如果一个word文档的话,是不是要先转换成txt文件才能计算有多少字符?
|
|
argv[0]对应的是程序的路径,难道也可能是相对路径还是怎样?? 希望解疑。谢谢。 |
|
你分别用下面几种方法试试:
cd /d d:\mydir myprog myinput.txt cd /d c:\ d:\mydir\myprog d:\mydir\myinput.txt d:myprog d:myinput.txt |
|
zhao4zhong1,我没有看明白上面。分别是哪几种方法呀?
还有第4行中cd /d c:\ dos中cd 是进入某个文件夹的意思。您这一行的意思到底是进到哪里呀? 我刚刚学了一点dos,还不是很熟悉,请进一步明说。 |
|
在dos环境下 将你的程序的地址打出来 空格 将你自己建好的txt文档的地址打出来 回车 ,结果就出来了
putc(ch,stdout); //相当于 putchar(ch)~~ |