无法从文本文件中读取
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。缩进和大括号有点让我发疯:)
#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。缩进和大括号有点让我发疯:)