使用ifstream打开文件后的Cin.get()

时间:2012-11-29 08:03:34

标签: c++

我之前发布了类似的代码,但我认为这是一个不同的问题。我只是想不通为什么我的运行代码不会超过“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

2 个答案:

答案 0 :(得分: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==进行比较。

答案 1 :(得分:0)

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