免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2320 | 回复: 5

[C] 在命令行下运行程序,实验结果和我理解的不一样。 [复制链接]

论坛徽章:
0
发表于 2014-11-20 10:39 |显示全部楼层

  1. #include<stdio.h>
  2. #include<string.h>
  3. #define MAXLINE 10000

  4. int getline(char *line, int max);

  5. /*find函数:打印与第一个参数指定的模式匹配的行*/
  6. main(int argc,int *argv[])
  7. {
  8.         char line[MAXLINE];
  9.         int found = 0;

  10.         if(argc != 2)
  11.                 printf("Usage:find pattern\n");
  12.         else
  13.         {
  14.                 while(getline(line,MAXLINE) > 0)
  15.                         if(strstr(line,argv[1]) != NULL)
  16.                         {
  17.                                 printf("%s",line);
  18.                                 found++;
  19.                         }
  20.         }
  21.         return found;
  22. }


  23. /*getline:将输入字符串存储在s中,并返回输入字符串的长度*/
  24. int getline(char s[],int lim)
  25. {
  26.         int c,i;
  27.         i = 0;
  28.         while(--lim > 0 && (c = getchar() ) != EOF && c != '\n')
  29.                 s[i++] =  c;
  30.         if(c == '\n')
  31.                 s[i++] = c;
  32.         s[i] = '\0';
  33.         return i;
  34. }
复制代码
用visual c++ 6.0编译了这个程序后,在cmd命令窗口里输入参数后,遇到的问题:

1,不管输入几个参数,如 “D:\WIN-tc\chapter_5\Debug\5.10_test4 ab ehabc”  ,输出结果都是“Usage:find pattern”?

2,getline函数是“将输入字符串存储在s中,并返回此字符串的长度”,“输入字符”和 后续的“命令行参数”是什么关系呢?感觉执行阶段输入的(命令行)参数都保存在argv[]中了,没有用到getline()函数啊?

在命令行参数的这个地方卡主了,先谢谢啦~

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
发表于 2014-11-20 10:50 |显示全部楼层
lz,单步调试。

论坛徽章:
7
巳蛇
日期:2014-04-10 08:54:57白羊座
日期:2014-04-22 20:06:262015年亚洲杯之沙特阿拉伯
日期:2015-02-10 14:18:532015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之吉达阿赫利
日期:2015-06-02 11:34:112015亚冠之武里南联
日期:2015-06-24 12:13:082015亚冠之阿尔纳斯尔
日期:2015-08-03 09:08:25
发表于 2014-11-20 11:12 |显示全部楼层
回复 1# joychenke


    我没有测试你的代码,但是你确定不管输入几个参数都不行吗?
根据你的代码,你只能不多不少正好输入一个参数才可以正常运行。
因为代码里的判断是 argc!=2,这个argc是包括运行程序的,也就是argc至少会为1,增加一个参数就会把argc加1,所以,你的代码应该是不多不少需要输入1个参数的,多了和少了都会输出Usage那行。

另外,参数是放入argv的,这个跟getline没关系。
但是你的没有用到getline的逻辑好奇怪,明明代码里就有调用getline嘛,然后getline又会调用getchar,这个会在程序开始运行以后从标准输入进行读取的。这个标准输入跟命令行参数没有什么关系。

你要是不知道什么是标准输入的话,建议你自己百度一下。

论坛徽章:
0
发表于 2014-11-20 11:37 |显示全部楼层
Monox 发表于 2014-11-20 11:12
回复 1# joychenke

我明白了。

首先,我在问题里说的”不管输入几个参数“,参数数目都是大于等于2的。。。

最最重要的,我没有明白标准输入和命令行参数。没用到getline,是因为我根本就没有标准输入字符串。。。

刚试了下,输入一个命令行参数(存在argv[]),回车,输入任一一个字符串(此时用到函数getline()),就可以了。感谢!


论坛徽章:
46
2015小元宵徽章
日期:2015-03-06 15:58:18羊年新春福章
日期:2015-04-14 10:37:422015年亚洲杯之阿曼
日期:2015-04-14 10:41:50NBA常规赛纪念章
日期:2015-05-04 22:32:03NBA季后赛大富翁
日期:2015-05-04 22:34:11菠菜明灯
日期:2015-05-04 22:35:49新奥尔良黄蜂
日期:2015-05-04 22:49:2315-16赛季CBA联赛之广夏
日期:2015-12-11 15:02:342015年亚洲杯之巴勒斯坦
日期:2015-03-04 19:56:562015年亚洲杯之阿联酋
日期:2015-03-04 11:19:04休斯顿火箭
日期:2015-03-02 16:32:11纽约尼克斯
日期:2015-03-02 16:09:04
发表于 2014-11-20 11:48 |显示全部楼层
楼主这头像太萌了,每天一问,有很多问题单步调试就能解决的!

论坛徽章:
0
发表于 2014-11-20 12:45 |显示全部楼层
回复 5# super皮波

哈哈,谢谢!你的头像我也很喜欢。O(∩_∩)O

其实2楼让我单步调试的时候,我也在默默的在vc 6.0里试了下,结果没有调试出来。+_+  结果发现,这个问题的根源不在调试上。

我也反省了下,确实没用过单步调试,遇到卡顿的地方,发帖毕竟慢了,接下来,把单步调试也用会。↖(^ω^)↗

ps:还是会多写程序,继续争取一天一问。哈哈!{:2_172:}


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP