-1

我正在尝试用 C++ 制作一个基本的文件浏览器,但是它不能很好地工作。我在底部放了一张图片来显示正在发生的事情,因为这很难解释:

#include <iostream>
#include <sstream>
#include <fstream>

#define NULL(str) (str == "")

using namespace std;

void read(string *memory);
void write(string *memory);

int main(void){
    string memory;
    for(;;){
        cout << "Please select your option:" << endl << "1: read a file - this text will be stored in memory until another file is read" << endl << "2: write text to a file - use ~MEM to get memory" << endl;
        char opt = getchar();
        switch(opt){
        case '1':
            read(&memory);
            break;
        case '2':
            write(&memory);
            break;
        default:
            cout << "The option was unrecongized" << endl << endl;
            break;
        }
    }
    return 0;
}

void read(string *memory){
    string path;
    cout << "Please enter the path of the file you would like to read" << endl;
    getline(cin, path);
    string str;
    string input;
    ifstream file;
    file.open(path);
    if(!file.is_open() || !file.good()){
        cout << "An error occured while reading the file" << endl << endl;
    }
    else{
        while(getline(file, str)){
            input += str;
        }
        file.close();
        if(NULL(input)){
            cout << "The input from the file is empty" << endl << endl;
        }
        else if(input.size() > 1000){
            cout << "The file is too large: it is bigger than 1000 characters" << endl << endl;
        }
        else{
            *memory = input;
            cout << input << endl << endl;
        }
    }
}

void write(string *memory){
    string path;
    cout << "Please enter the path of the file you would like to write to" << endl;
    getline(cin, path);
    ofstream file;
    file.open(path);
    if(!file.is_open() || !file.good()){
        cout << "The file could not be written to" << endl << endl;
    }
    else{
        string input;
        getline(cin, input);
        if(input == "~MEM"){
            file << *memory;
        }
        else{
            file << input;
        }
        file.close();
    }
}

我的问题

4

1 回答 1

2

您似乎犯了在阅读用户输入时不注意行尾的常见错误。

如果用户在1输入缓冲区中输入了真正的内容1\n(他们必须按回车,对吗?)并且您调用getchar获取1所以缓冲区现在包含\n. 然后,当您调用getline获取路径时,它将读取到第一个新行。所以它得到一个空字符串。

在你之后getchar你应该打电话ignore跳过换行符。

于 2013-12-09T17:16:23.133 回答