修正行数读取函数的语法
Fixing syntax of number of line reading function
我之前试过编写一个程序,告诉用户文本文件中的字符、单词和行数。我编写了函数来确定每个元素的数量,但我是按值传递它们的。这导致了一个错误,因为在读取char的数量之后,它将位于文件的末尾,然后其他两个输出为零。现在我似乎不能重写我的函数,以便每次检查字符,单词和行时打开和关闭文件。有人看到我的错误在哪里吗??谢谢!(现在只是复制并粘贴了我的一个函数)。
int num_of_lines(ifstream file)
{
string myfile;
myfile = argv[1];
ifstream l;
l.open(myfile);
int cnt3 = 0;
string str;
while(getline(file, str))cnt3++;
l.close();
return(cnt3);
}
int main(int argc, char **argv)
{
int num_of_char(ifstream file);
string file;
file = argv[1];
if(argc == 1)die("usage: mywc your_file");
ifstream ifs;
ifs.open(file);
if(ifs.is_open())
{
int a, b, c;
a = num_of_lines(ifs);
cout <<"Lines: " << a << endl;
}
else
{
cerr <<"Could not open: " << file << endl;
exit(1);
}
ifs.close();
return(0);
}
除了知道名称并创建新的seekg
之外,没有办法"重新打开"文件,但是您可以使用CC_2成员函数来设置文件中的读取位置,并将其设置为0将使下一次读取操作从文件的开头开始。
流是不可能复制的,所以你不能"按值"传递它,而必须通过引用传递它。
int num_of_lines(ifstream &file)
{
int count = 0;
string str;
while (getline(file, str)) {
count++;
}
file.seekg(0);
return count;
}
对于整个问题,我同意Mats Petersson的观点。一次计算字符、行和单词比三次读取文件要高效得多。
相关文章:
- C++使用 rand 定义函数语法
- QObject::连接不起作用 - 使用函数语法找不到信号
- C++ std::函数语法问题
- 如何在不更改现有函数语法的情况下将普通指针替换为共享指针
- 模板化函数语法错误中使用的模板化类中的嵌套类
- C 变化函数语法
- 返回语句中的构造函数语法
- 复制构造函数语法错误:myclass 没有成员 mymember
- C++.传递给函数.语法问题
- C++可视化工作室函数语法突出显示
- 在 c++ 中移动 2d 数组的构造函数(语法逻辑不清楚):
- c 通过值或指针函数语法
- 正确的朋友模板函数语法
- C++类构造函数语法的解释
- C++ 使用指针移动构造函数(*&&&语法)
- 复制构造函数语法并显示构造函数的值
- 回调函数语法
- 类模板专用化中的成员函数语法
- C++学习函数语法
- 使用模板 C++ 的友元函数语法错误