C 代码未在文件中读取
C++ Code not reading in file
好吧,这是针对一个项目,该项目应该从文件中读取一些代码,其中包含有关学生的信息。但是,它似乎并没有从文件中读取任何内容。我正在Visual Studio工作,当我运行它并在最后停下来时,我会查看我创建的向量,它说其中没有学生。学生是我创建的课程。
ifstream input;
string student_file;
cin >> student_file;
input.open(student_file);
double id_number = 0;
while (input >> id_number)
{
string name = "";
string address = "";
string phone_number = "";
cin.sync();
getline(input, name);
cin.sync();
getline(input, address);
cin.sync();
getline(input, phone_number);
Student * s = new Student(id_number, name, address, phone_number);
students.push_back(s);
}
应该使用构造函数和所有内容正确设置学生班,因此我假设这是这个代码给我带来麻烦。即使是关于问题是循环还是我对getlines的使用的方向,也会有所帮助。谢谢!
此行:
while (input >> id_number)
将整数从输入流提取到id_number
中。提取完成后,Newline字符仍留在流中。std::getline()
被编程为在发现Newline字符时终止提取(除其他规格)。
要绕过这种情况,您需要使用std::ws
操纵器丢弃 newline。 std::ws
仅丢弃从流中引导。新线被认为是空格。还建议您检查您的输入是否成功地将提取在if
语句中封装:
if (std::getline(input >> std::ws, name) && std::getline(input >> std::ws, address) && std::getline(input >> std::ws, phone_number))
请注意,我还删除了呼叫之间的std::cin.sync()
。在此上下文中不需要同步输入缓冲区,因为没有执行流插入,因此不需要考虑外部序列的更改。此外,同步std::cin
的输入缓冲区的想法是非不敏感的,因为std::cin
不会受到input
上的操作的影响。
最后,您的指针持有的向量应该将实际对象本身保存。这避免了使用动态内存分配的需要。因此,向量的类型应为std::vector<Student>
。这就是您将在向量中构造元素的方式:
students.emplace_back(id_number, name, address, phone_number);
这是完整的代码:
#include <iostream>
#include <fstream>
#include <string>
int main()
{
std::ifstream input;
std::string student_file;
std::cin >> student_file;
input.open(student_file);
double id_number = 0;
std::vector<Student> students;
while (input >> id_number)
{
string name;
string address;
string phone_number;
if (std::getline(input >> std::ws, name) &&
std::getline(input >> std::ws, address) &&
std::getline(input >> std::ws, phone_number))
{
students.emplace_back(id_number, name, address, phone_number);
}
}
}
相关文章:
- 使用新行和不使用新行读取文件
- 读取文件并输入到矢量中
- 读取文件的最后一行并输入到链接列表时出错
- 为什么在读取文件大小时文件IO速度会发生变化
- 读取文件时运行时的未知行为
- 如何逐行读取文件,每行中的内容都用空格分隔并将其写入新文件中
- 读取文件中所有可能的十六进制 16 字节序列并打印每个序列
- C++ 读取文件读取文件不正确
- 读取文件并将其存储在unordered_map中时出现问题
- 读取文件时无法使用 OpenMP 获得加速
- 使用istringstearm和get行缓慢读取文件
- 如何继续读取不同功能中的文件,而不是从头开始再次读取文件?
- 读取文件时引发异常
- 从标准输入读取文件后读取用户输入
- 在读取文件后重置句柄
- 如何在C++编译时读取文件?
- std::ifstream 在读取文件中最后一项时设置 eofbit,但仅在读取数值类型时发生
- 读取文件在第二次调用时返回INVALID_HANDLE
- 通过指针读取文件
- 逐行读取文件,并将数据插入变量和数组中