使用fstream的对象作为函数参数(Using fstream Object as a Funct

2019-07-18 16:18发布

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

void vowel(fstream a){
    char ch;
    int ctr = 0;
    while(!a.eof()){
        a.get(ch);
        if (ch == 'A' || ch == 'E' || ch == 'I' || ch == 'O' || ch == 'U'){
            cout << ch;
            ctr++;
        }
    }
    cout << "Number of Vowels: " << ctr;
}

main(){
    fstream a;
    a.open("temp.txt", ios::in);
    vowel(a);
return 0;
}

在这个简单的程序,我想不会数数上限元音在文件TEMP.TXT的数量。 不过,我得到的错误:

IOS :: IOS(IOS&)是不是在功能fstream的访问:: fstream的(fstream的和)

相反,在功能打开文件本身做这项工作。 为什么会这样呢? 非常感谢

注意:

如何通过一个函数的参数使用的fstream(特别是ofstream的)

在这里,它说,它应该工作,我正在尝试的方式。

干草堆

Answer 1:

一个fstream对象是不可拷贝。 按引用传递,而不是: fstream&

void vowel(fstream& a)

请注意,可以避免调用open()提供相同的参数的构造器:

fstream a("temp.txt", ios::in);

不使用while(!a.eof())立即检查读取操作的结果。 在eof()当试图读取超出文件中的最后一个字符将只设置。 这意味着!a.eof()为真当上一次调用get(ch)读取文件的最后一个字符,但后续get(ch)将失败,并设置EOF但代码不会注意到,直到故障它已处理后ch再度即使读取失败。

例如正确的结构:

while (a.get(ch)) {


Answer 2:

你需要传递fstream 参考

void vowel(fstream& a){ .... }
//                ^ here!


Answer 3:

试试这个。 而不是发送文件计数线的元音。

#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>
int vowels=0;
void vowel(string a){
    char ch;
    int ctr = 0;
int temp=0;
    for(temp=0,temp<a.length();temp++){
        ch=a.at(temp);
        if (ch == 'A' || ch == 'E' || ch == 'I' || ch == 'O' || ch == 'U'){
            cout << ch;
            ctr++;
        }
    }
    vowels+=ctr;
}

main(){
    fstream a;
    a.open("temp.txt", ios::in);

string temp;
while(getline(a,temp))
{
vowel(temp);
function2(temp);
function3(temp);


... so on for more then one functions.

}        
vowel(a);
    return 0;
    }

如果你想通过文件,然后使用上述ANS(按引用传递fstream的)。



Answer 4:

有很多事情可以做,以解决您的问题,其中2 在声明ifstream的在全球范围内 ,并在全球宣布你的方法也。

C ++

#import<stuff>
//other imports here

ifsteam in_stream;
void method_Name(ifstream in_stream,string user_input);

int void main(){
string user_input;
instream.open("dogs.txt");//you can open your file here or in the method
//Code here 

cin>> user_input;
method_Name(user_input);

return 0;
}

void method_Name(){
//or even better opening file here

//do stuff

}

你的情况,你也可以使用“&” ifstream的经过这么像元音(ifstream的&A)将其传递的方法;

我在我的一些程序来打开.csv文件,并从中读取没有遇到的问题所使用的第一个实例。 顺便说一定要检查文件是否使用类似居然开...

 if (in_stream.fail( )){//Checking to see if file failed to open
        cout << "Input file opening failed.\n";
        exit(EXIT_FAILURE);      
}


文章来源: Using fstream Object as a Function Parameter