读取函数由main调用,但不执行

时间:2016-05-31 14:59:48

标签: c++ function

此文件从AD.txt中读取一些数据,将其存储到字符串中,并将字符串写入ADsubjects.txt。我的写函数似乎工作正常,但我的读不被调用。它甚至没有进入read函数来打印cout语句。我假设如果我只是简单地放置调用函数,它应该自动出现。这是我的代码:

#include <iostream>
    #include<fstream>
    #include <string.h>
    #include<iomanip>
    #include <cstdlib>
    #define rmax 15
    using namespace std;
    string data1;

阅读功能:

    void readSubjects(){
        cout<<"inside read"<<endl;
        ifstream is;
        is.open("AD.txt"); //opening the file
        cout<<"open text"<<endl;
        while(!is.eof()){
            char line[rmax];
            cout<<line<<endl;
            data1 += "\"";

            is.getline(line,rmax);
            for(int i=0; i<11;i++){
                data1 += line[i];
            }
            data1 += "\" \\ ";
        }
      is.close();
    }

写功能:

    void writeSubjects(){
        ofstream os;
        os.open("ADsubjects.txt",ios::out);
        os<<data1;
        os.close()
    }

主要功能:

    int main() {
        readSubjects();
        cout<<"read"<<endl;
        writeSubjects();
        cout<<"written"<<endl;
        cout << "Hello, World!" << endl;
        return 0;
    }

2 个答案:

答案 0 :(得分:1)

在此代码中;有很多问题。

os.close()中的编译问题 - 缺少分号

cout<<line<<endl;之后的

char line[rmax];代码错误,因为它未初始化。打印未初始化的变量可能会弄乱您的终端。

实际上,readline正确读取了该行。为什么使用for循环将11个字符从行复制到data1?示例中允许的最大长度为15。您可以按如下方式进行操作。

data1 += line;

以下代码可以使用。

void readSubjects(){
        cout<<"inside read"<<endl;
        ifstream is;
        is.open("AD.txt"); //opening the file
        cout<<"open text"<<endl;
        while(!is.eof()){
            char line[rmax];
//            cout<<line<<endl; // This is wrong
            data1 += "\"";

            is.getline(line,rmax);

 //           for(int i=0; i<11;i++){
 //               data1 += line[i];
 //           }

            data1 += line;

            data1 += "\" \\ ";
        }
      is.close();
    }

答案 1 :(得分:0)

在读取的while循环中,您需要做的只是:

    while(is){  //the is will run until it hits the end of file.
      //code here
    }  

如果readSubjects()根本没有被调用,那么函数原型可能需要在int main()上面声明,而实际的函数声明应该在int main()下面声明,如下所示: / p>

    void readSubjects();


    int main(){
      readsubjects();
      //more code...
    }


    void readSubjects()
    {
      //actual function code
    }