#include <iostream>
#include <fstream>
#include <stdio.h>
using namespace std;
int count1(string fileName){
ifstream infile;
if (!infile)
throw "file cannot be opened";
else{
int spaces = 0;
while(getline(fileName,spaces)){
for(int i=0;i<fileName.size();i++){
if(fileName[i]==' ')
spaces++;
}
}
return spaces;
}
}
int count2(string fileName){
int line = 0;
while(getline(fileName,line)){
for(int i=0;i<fileName.size();i++)
if(fileName[i]=='\n')
line++;
}
return line;
}
int count3(string fileName){
int characters = fileName.size();
return characters;
}
int main(int argc, char **argv)
{
int spaces,line,characters = 0;
ifstream infile;
infile.open("fox.txt");
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;
}
}
//此程序的要点是正确计算文件中的字符数,空格数和行数。文件名将被接受为程序的参数。我应该检查文件是否存在并且可以在try-catch块中打开,如果无法打开文件则抛出异常。我一直只在第13和24行得到错误:无法将'std :: string'转换为'char **'以将参数'1'转换为'__ssize_t getline(char **,size_t *,FILE *)'
答案 0 :(得分:0)
您的代码存在很多问题。
让我们从:
开始int main(int argc, char **argv)
{
int spaces,line,characters = 0; // Delete this line
ifstream infile; // Delete this line
infile.open("fox.txt"); // Delete this line
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;
}
}
所有这些都不在main()中使用!您似乎在理解变量的范围时遇到了问题,即何时变量可访问/有效。 main()中的变量声明在从main()调用的函数中不可访问。
因此,在每个功能中,您需要再次打开文件。类似的东西:
ifstream infile;
infile.open(filename);
if (!infile)
throw "file cannot be opened";
所有三个功能。
然后是getline - 使用
getline(infile,spaces))
代替。