无法从文本文件中读取

Can't read from a text file

#include <iostream>
#include <fstream>
#include <stdio.h>

using namespace std;

int count1 (string fileName){
    ifstream infile;
    infile.open("fileName");
    if (!infile)
     throw "file cannot be opened";
    else{
     string line;
     int characters=0;
     while(getline(infile,line)){
         characters += line.length();
         }
         return characters;
     }
     infile.close();
}

int count2 (string fileName){
     ifstream infile;
     infile.open("fileName");
     if (!infile)
      throw "file cannot be opened";
     else{
      string line;
      int spaces=0;
      while(getline(infile,line)){
         char c;
         if(isspace(c)&&c !='\r')
             spaces++;}
         return spaces;
      }
      infile.close();
}

 int count3 (string fileName){
     ifstream infile;
     infile.open("fileName");
     if (!infile)
      throw "file cannot be opened";
     else{
      string line;
      int lines=0;
      while(getline(infile,line))
       lines++;
      return lines;
      }
      infile.close();
}

 int main(int argc,char** argv)
 {
  try{
      int result1 = count1(argv[1]);
      int result2 = count2(argv[1]);
      int result3 = count3(argv[1]);
      cout<<result1<<' '<<result2<<' '<<result3<<endl;
     } catch (const char *e){
         cout<<e<<endl;
     }
     return 0;
 }

//试图修复我的程序,该程序应该从文本文件中读取并输出它具有的字符、空格和行的数量。我已经在这个程序的同一目录中有一个 file.txt。但是,它总是说 "file cannot be opened"。我想说问题是处理 "fileName",但我对如何表示实际文件感到困惑。 *注意:我提前为我的随意缩进道歉。

您正在尝试打开 "fileName",即名为 "fileName" 的文件。我相信你想要的是打开调用函数时提到的文件。像这样删除引号:

infile.open(fileName.c_str());

末尾的 .c_str() 部分将您的输入字符串转换为 c 风格的字符串,以便 open 函数可以读取它。

现在只需使用 "file.txt"

调用计数函数

===更新===

针对您的评论,我相信我看到了问题所在。您正在创建一个 char c,然后在没有实际设置其值的情况下对其进行测试。

而不是这个:

  string line;
  int spaces=0;
  while(getline(infile,line)){
     char c;
     if(isspace(c)&&c !='\r')
         spaces++;}
     return spaces;
  }

尝试:

  string line;
  int spaces=0;
  while(getline(infile,line)){
     for (int i = 0; i < line.size(); i++)
         if (line[i] == ' ')
            spaces++;
  }
     return spaces;
  }

P.S。缩进和大括号有点让我发疯:)