任务跟踪器的文件i/o问题
file i/o problems with task tracker
我一直在尝试制作一个任务跟踪器控制台应用程序,该应用程序能够执行三种不同的功能-->添加任务、显示任务列表和按类名搜索任务列表。我添加任务的代码运行良好,但我试图找出如何正确显示任务列表,但它只输出部分任务。
例如,如果您添加任务CS162;实验室到期;2014年4月20日和任务MTH251;测验2014年4月22日。如果你关闭文件并查看它,它们被写入tasks.txt很好,但当我去读回它们时,输出看起来像:2014年4月20日到期MTH251测验这仅仅是期望输出的一小部分。我还需要按名字搜索,但我想在我找到其他问题后,我可以很容易地找到
我的文本文件如下:
CS162;Lab Due;04/20/2014
MTH251;Quiz;04/22/2014
我的代码是这样的:
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
ofstream outFile;
ifstream inFile;
const int MAXCHAR = 101;
const int MAXLINE = 256;
struct task
{
char course[MAXCHAR];
char desc[MAXCHAR];
char date[MAXCHAR];
};
int main()
{
task track;
bool quit = false;
while (quit == false)
{
char choice;
cout << "Welcome to my Task List: n";
cout << "<a> to add taskn";
cout << "<s> to show the task listn";
cout << "<f> to find a task by course namen";
cout << "<q> to quitn";
cin >> choice;
cin.ignore(100, 'n');
if (choice == 'a' || choice == 'A')
{
outFile.open("tasks.txt", fstream::app);
cout << "Enter Course Name (less than 101 characters): ";
cin.get(track.course, MAXCHAR, 'n');
cin.clear();
cin.ignore(100, 'n');
cout << "Enter Task Description (less than 101 characters): ";
cin.get(track.desc, MAXCHAR, 'n');
cin.clear();
cin.ignore(100, 'n');
cout << "Enter due date (mm/dd/yyyy): ";
cin.get(track.date, MAXCHAR, 'n');
cin.clear();
cin.ignore(100, 'n');
char confirm;
cout << "nAre you sure you want to add " << track.course << ";" << track.desc << ";" << track.date << "? (y/n)";
cin >> confirm;
if (confirm == 'y' || confirm == 'Y')
{
cin.clear();
cin.ignore(100, 'n');
outFile << track.course << ";" << track.desc << ";" << track.date << "n";
cout << "Task has been addedn";
}
else if (confirm == 'n' || confirm == 'N')
{
cin.clear();
cin.ignore(100, 'n');
}
outFile.close();
}
else if (choice == 's' || choice == 'S')
{
inFile.open("tasks.txt");
char str[MAXCHAR];
while (inFile >> str)
{
inFile.getline(track.course, MAXLINE, ';');
inFile.getline(track.desc, MAXLINE, ';');
inFile.getline(track.date, MAXLINE, ';');
cout << track.course << track.desc << track.date;
}
inFile.close();
cin.clear();
cin.ignore(100, 'n');
}
else if (choice == 'f' || choice == 'F')
{
char course[MAXCHAR];
cout << "Enter Course Name: ";
cin >> course;
inFile.open("tasks.txt");
while (!inFile)
{
}
inFile.close();
}
else if (choice == 'q' || choice == 'Q')
{
cin.clear();
cin.ignore(100, 'n');
quit = true;
}
}
}
编辑:我现在"显示任务列表"工作正常,但有人能向我解释为什么使用这样的东西不适用于"搜索课程"吗??
else if (choice == 'f' || choice == 'F')
{
char course[MAXCHAR];
cout << "Enter Course Name: ";
cin >> course;
inFile.open("tasks.txt");
while (inFile)
{
inFile.getline(track.course, MAXLINE, ';');
inFile.ignore(100, 'n');
while (strcmp(course, track.course) != 0)
{
cout << track.course;
}
}
}
while (inFile >> str) {
inFile.getline(track.course, MAXLINE, ';');
inFile.getline(track.desc, MAXLINE, ';');
inFile.getline(track.date, MAXLINE, ';');
std::cout << track.course << track.desc << track.date;
}
第一行将把所有字符读入str
,直到它碰到第一个空白,所以如果您的输入是
CS162;Lab Due;04/20/2014
MTH251;Quiz;04/22/2014
则它将向上读取CCD_ 2并将其包括到CCD_。
接下来的三行将读取,直到它们到达;
,因此您的轨道结构将如下所示
course = "Due"
desc = "04/20/2014nMTH251" // note the newline
date = "Quiz"
更改while
循环和更改最后一个提取器应该可以解决以下问题:
while (inFile) {
inFile.getline(track.course, MAXLINE, ';');
inFile.getline(track.desc, MAXLINE, ';');
inFile.getline(track.date, MAXLINE, 'n');
if (inFile)
std::cout << track.course << track.desc << track.date;
}
尽管值得一提的是,在这里可以做很多事情来简化代码,包括使用std::string
而不是char
数组,例如这样。
相关文章:
- 使用mongocxx驱动程序时包含头文件问题
- 在WSL:configure_file上对config_file的每次调用都失败:配置文件时出现问题
- 编译要在英特尔Hyperscan中使用的.cc文件时出现问题
- 使用 seekg() 读取C++中的文件时出现问题
- sqlite3 和生成文件中的链接出现问题
- C++头文件和类实现出现问题
- 用户输入字符串的文件附加问题..C++
- node-gyp 的先有鸡还是先有蛋的问题:指向依赖项中的头文件
- 读取文件并将其存储在unordered_map中时出现问题
- 编译 llvm 插件时出现问题:llvm/Config/llvm-config.h:没有这样的文件或目录
- 我在使用C++文件时遇到了一些问题
- 在Linux上使用Clang / OLLVM交叉编译helloworld Windows可执行文件时的问题
- 将文件复制到自定义位置,存在字符串转换问题
- DirectX12 的问题:"d3dApp.h":没有这样的文件或目录
- (ODR 使用问题)在不同文件中priority_queue名称相同的结构
- C++模板编程设计问题 - 根据输入文件返回不同的类型
- 读取制表符分隔的文件时出现问题 C++
- 当我在 CLion 中读取数组中的 txt 文件时C++编码问题
- 使用 RapidXML 解析大型 XML(大小大于 65 KB)文件时出现问题
- C++:读取.BMP文件时出现问题;文件结束时间早于预期