首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2013-07-01 
为什么这个程序argc2时试验不成功这是书上的一道编程练习题:编写一段程序,将一个字符、零个或多个文件名

为什么这个程序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

热点排行