0

我之前发布了类似的代码,但我认为现在这是一个不同的问题。我只是无法弄清楚为什么我的运行代码不会超过“infile open”。(“-e”打印出来,“-d”不打印)我正在尝试打开我的文件,使用命令行选项来确定我是否会打印出一定倍数的字符。

例如,a.out -d 2 < sample.txt将每隔一个字母打印一次。

int main (int argc, char *argv[])
{
   ifstream infile; 

   if (infile.good())
      printf("infile open \n");

   int c;    
   int number = 0;
   int count = 0; 


   string str1 = argv[1];
   string str2 = "-d";
   string str3 = "-e";


   if (str1.compare(str2) == 0)
   { 
      printf("entered -d\n");
      c = infile.get();       

         while(!infile.eof()) {

             number = atoi(argv[2]);  

              if (count == number)
            {
              cout.put(c);
                      count = 0;
                }
                  else
                      count++;

             c = infile.get();         

}//end while 

}//end if

           if (str1.compare(str3) == 0)       
                printf("entered -e\n");


}//end main
4

2 回答 2

4

infile从未打开:

ifstream infile; // Does not open a file as no file name is supplied.

使用或作为另一个命令行参数cin传递并打开它:"sample.txt"

ifstream inFile(argv[3]);
if (inFile.is_open())
{
}

其他要点:

  • 使用std::cout而不是混合printf()std::cout
  • atoi()0如果参数无效或参数有效则返回0。请参阅strtol()替代方案。
  • 没有理由argv[2]while. 只需在while.
  • argc在访问 的元素之前始终检查argv,以避免无效的内存访问。
  • std::string可以使用 比较实例operator==
于 2012-11-29T08:08:09.630 回答
0

在命令行上运行这样的东西时:“a.out < sample.txt”,没有指定要打开的实际文件名,Unix 中的“<”命令只会将 sample.txt 的内容传递给 a.out通过标准输入...因此,就像 hmjd 指出的那样,您应该使用 cin。如果文件是作为参数提供的,您可能希望以物理方式打开文件,即“a.out sample.txt”而不是“a.out < sample.txt”。

于 2012-11-29T10:14:41.157 回答