我正在尝试用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();
}
}
答案 0 :(得分:2)
在阅读用户输入时,您似乎犯了一个常见的错误:不看行结尾。
如果用户输入1
输入缓冲区中的实际内容是1\n
(他们必须按Enter键,对吗?)并且您调用getchar
来获取1
所以缓冲区现在包含\n
。然后,当您致电getline
以获取路径时,它会一直读到第一个新行。所以它得到一个空字符串。
在getchar
之后,您应该致电ignore
跳过换行符。