读书人

为何这个程序argc==2时试验不成功

发布时间: 2013-07-01 12:33:04 作者: rapoo

为什么这个程序argc==2时试验不成功
这是书上的一道编程练习题:

编写一段程序,将一个字符、零个或多个文件名作为命令行参数。如果字符后没有参数跟随,程序读取标准输入文件。否则,程序依次打开每个文件,然后报告 每个文件中该字符的出现次数。文件名和字符本身也与计数值一起报告。程序中包括错误检查,以确定参数数目是否正确和是否能打开文件。如果不能打开文件,程 序要报告这一情况然后继续处理下一文件。

我从网上得到的程序如下,但是我想试验一下argc==2时, 为什么在黑窗口输入一段字符时按下回车,没有反应,一直是输入状态。比如我在'工程" “设置”“调试”“工程变量”中只输入一个a,然后在运行的黑窗口中输入abca,回车,我希望能计算出a出现了2次 的结果,但是一直是输入状态。怎么回事?是我对程序理解错了?

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>

int count(char ch, FILE *fp);

int main(int argc, char *argv[])
{
int i;
char ch;
FILE *fp;
if (argc<2)
{
printf("no char?\n");
exit(1);
}
ch = argv[1][0];
if ( argc == 2 )
{
printf("input a article:");
printf("In your input : %c has been appeared %d times.\n",ch,count(ch,stdin));
}
else
for (i=2;i<argc;i++)
{
if( ( fp = fopen(argv[i],"r") ) == NULL )
printf("Can't open %s\n",argv[i]);
else
{
printf("In %s : %c has been appeared %d times.\n",argv[i], ch, count(ch,fp));
fclose( fp );
}
}

return 0;
}


int count(char ch, FILE *fp)
{
int n=0;
char ch2;
while( (ch2=getc(fp)) != EOF)
if( ch == ch2 ) n++;

return n;
}

[解决办法]
int argc, char *argv[]

命令行参数不是在黑框那里输入的,那里是标准输入框。

命令行 是随着exe一起启动的。编译器不同,输入命令行参数的地方不同
[解决办法]
引用:
回复楼上,我没有在黑框输入参数,因为当我在'工程" “设置”“调试”“工程变量”中只输入一个a后,因为这个时候argc==2,确定回到程序点编译运行,出现“input a article;”这个肯定是让我输入一段话吧,所以我就随便输入些内容,怎么点回车后没有结果出现,而是一直是输入状态。
while( (ch2=getc(fp)) != EOF)
你没有输入EOF,就不会停止
手动的话,可以试试Ctrl+Z

读书人网 >C语言

热点推荐