代码之家  ›  专栏  ›  技术社区  ›  physicsmichael

C++ NexBee:将fScript传递给函数来读取数据

  •  6
  • physicsmichael  · 技术社区  · 15 年前

    我有一个名为 num.txt 谁是唯一的内容 123 . 那么我有以下几点:

    void alt_reader(ifstream &file, char* line){
        file.read(line, 3);
        cout << "First Time: " << line << endl;
    }
    
    int main() {
        ifstream inFile;
        int num;
        inFile.open("num.txt");
        alt_reader(inFile, (char*)&num);
        cout << "Second Time: " << num << endl;
    }
    

    输出为:

    First Time: 123
    Second Time: 3355185
    

    你能帮我弄清楚如何得到一个在函数中读取的fstream,它仍然在main中分配变量吗?我这么做是因为 alt_reader 真的有很多,但这是我坚持的部分。非常感谢你的帮助。

    更新: 利用比尔·奥尼尔的评论,我写了

    void alt_reader(ifstream &file, stringstream &str, int n){
        char buffer[n+1];
        file.read(buffer, n);
        buffer[n] = 0;
        str << buffer;
        cout << "First Time: " << buffer << endl; //First Time: 123
    }
    
    int main() {
        ifstream inFile;
        stringstream strm;
        int num;
        inFile.open("num.txt");
        alt_reader(inFile, strm, 3);
        cout << "Second Time: " << num << endl; //Second Time: 123
    }
    

    谢谢。有什么评论吗?

    2 回复  |  直到 11 年前
        1
  •  7
  •   Billy ONeal IS4    11 年前

    第一次打印变量时,将其作为 char * ,打印时将文件视为文本文件(幸运的是没有崩溃)。第二次印刷时,你把它重新解释为 int ,使表示完全不同。

    无论何时将指针从一种类型强制转换到另一种类型,通常都会调用未定义的行为。自从 char 与…没有标准关系 int ,你已经拿到了。

    编辑:回答您的评论问题:

    #include <sstream>
    
    void foo(std::stream &str) {
     str << "42\n";
    };
    
    int main() {
     int aNumber;
     std::stringstream aStringStream;
     foo(aStringStream); //Pass our stream to the function. It contains
        //"42\n" when the function returns.
     aStringStream >> aNumber; //aNumber == 42
     aNumber += 10; //aNumber == 52;
     std::cout << aNumber; //Print "52"
    }
    
        2
  •  2
  •   quamrana Ryuzaki L    15 年前

    你至少有两个问题。

    在主()中:

    1. 您应该将字符串缓冲区传递到 alt_reader ,而是传递一个int。
    2. 你好像想读这个字符串 '123' 但是想要一个int值 123 .

    你可以:

    void alt_reader(ifstream &file, char* line){
        file.read(line, 3);
        line[3]=0;
        cout << "First Time: " << line << endl;
    }
    
    int main() {
        ifstream inFile;
        inFile.open("num.txt");
    
        char buffer[128];
        alt_reader(inFile, buffer);
    
        int num=atoi(buffer);
        cout << "Second Time: " << num << endl;
    
        return 0;
    }
    

    注意,我添加了 line[3]=0; 阿尔特读者 atoi 是否从字符串转换( scii)到int.