使用 getline() 从文件中读取行时出现问题
Issue reading line from file with getline()
我设置了readFile()方法,以便我的"myList"向量保持更新,但是当我运行程序时,尽管我的addItem()方法正确地写入文件,但我的向量是空的。
我尝试四处寻找有关 ifstream 和 getline 的问题,但大多数解决方案都相当于提前知道每行读取的项目数的解决方法。
如果有人能告诉我我做错了什么,我将不胜感激。
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <vector>
using namespace std;
void readFile(vector<string> myList);
void writeToFile(vector<string> myList);
void mainMenu();
void displayList(vector<string> myList);
void addItem(vector<string> myList);
void removeItem(vector<string> myList);
string fileName = "C:\Users\Owner\Documents.todo_list.txt";
int main()
{
vector<string> myList;
int choice;
do
{
readFile(myList);
mainMenu();
cin >> choice;
cout << endl;
switch(choice)
{
case 1:
{
displayList(myList);
break;
}
case 2:
{
addItem(myList);
break;
}
case 3:
{
removeItem(myList);
break;
}
default:
{
}
}
cout << endl;
} while (choice != 0);
return 0;
}
void readFile(vector<string> myList)
{
ifstream read(fileName.c_str(), ios::in);
if(!read)
{
cout << "Could not open file." << endl;
exit(1);
}
if (myList.size() > 0)
{
myList.clear();
}
else
{
string item;
getline(read,item);
myList.push_back(item);
}
read.close();
}
void writeToFile(vector<string> myList)
{
ofstream rewrite(fileName.c_str(), ios::out);
for (int i = 0; i < myList.size(); ++i)
{
rewrite << myList[i] << endl;
}
rewrite.close();
}
void mainMenu()
{
cout << " ========== Main Menu ==========" << endl;
cout << " 1. Display To-do List" << endl;
cout << " 2. Add item to the To-do List" << endl;
cout << " 3. Remove item from the To-do List" << endl;
cout << "n 0. Exit program" << endl;
cout << ": ";
}
void displayList(vector<string> myList)
{
cout << " ========== To-do List =========" << endl;
if (myList.empty())
{
cout << " ----- empty list -----" << endl;
}
else
{
for (int i = 0; i < myList.size(); ++i)
{
cout << " " << (i + 1) << ". " << myList[i] << endl;
}
}
}
void addItem(vector<string> myList)
{
ofstream write(fileName.c_str(), ios::app);
string item;
cout << "Please enter an item to add to the list: ";
cin.ignore();
getline(cin, item);
write << item << endl;
write.close();
}
void removeItem(vector<string> myList)
{
int item;
displayList(myList);
cout << "nPlease select an item to delete: ";
cin >> item;
cout << endl;
cout << "...removing "" << myList[item - 1] << """ << endl;
myList.erase(myList.begin() + (item - 1));
writeToFile(myList);
}
readFile 的参数似乎是一个参考:
void readFile(vector<string>& myList)
顺便说一句,当前的 readFile 只读取一行。
相关文章:
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 读取最后一行代码算法 - c++ 时出现问题
- 使用 seekg() 读取C++中的文件时出现问题
- 从矢量C++读取字符时出现问题
- 读取文件并将其存储在unordered_map中时出现问题
- 使用 minijson-reader 库读取 JSON 字符串时出现问题
- C++线程安全:如果只有一个线程可以写入非原子变量,但多个线程从中读取. 会遇到问题吗?
- 0xC0000005:访问冲突读取位置 0x00000000. 重载 == 运算符的问题
- 读取制表符分隔的文件时出现问题 C++
- 当我在 CLion 中读取数组中的 txt 文件时C++编码问题
- 我遇到使用 c++ 逐行读取输入文件的问题
- 关于读取有效 c++ 第 4 项(将非局部静态变量替换为局部静态变量)的问题
- 使用getline读取.csv文件时出现问题
- 在C++中读取 unicode 输入时出现问题
- 从文件中读取文本时出现编码问题
- 从标准输入读取多个类型时出现问题
- 使用管道从 STDIN 读取分叉进程时出现问题
- FSTREAM的问题读取确定,但不编写用户输入字符串
- 计数排序输出问题:读取访问冲突
- 问题读取预编译的着色器文件ID3DBlob