Ошибка обозревателя файлов C ++

Я пытаюсь сделать простой файловый браузер на 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();
}
}

Моя проблема

-1

Решение

Кажется, вы совершаете распространенную ошибку — не просматриваете окончания строк при чтении пользовательского ввода.

Если пользователь вводит 1 что на самом деле во входном буфере 1\n (они должны были нажать Enter, верно?) и вы звоните getchar чтобы получить 1 поэтому буфер теперь содержит \n, Затем, когда вы звоните getline чтобы получить путь, он будет читать до первой новой строки. Таким образом, он получает пустую строку.

После вашего getchar ты должен позвонить ignore пропустить перевод строки.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]