C ++文件浏览器错误

时间:2013-12-09 17:11:46

标签: c++ file console ifstream file-browser

我正在尝试用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();
    }
}

My Problem

1 个答案:

答案 0 :(得分:2)

在阅读用户输入时,您似乎犯了一个常见的错误:不看行结尾。

如果用户输入1输入缓冲区中的实际内容是1\n(他们必须按Enter键,对吗?)并且您调用getchar来获取1所以缓冲区现在包含\n。然后,当您致电getline以获取路径时,它会一直读到第一个新行。所以它得到一个空字符串。

getchar之后,您应该致电ignore跳过换行符。