从文件和字符串问题中读取
Reading from file & String issues
我正在使用 for 循环从文件中读取数据并将值存储在类成员中:
while (!bookstxt.eof())
{
for (int i = 0; i < x; i++) {
getline(bookstxt, title);
getline(bookstxt, author);
getline(bookstxt, publisher);
getline(bookstxt, isbn);
cin.clear();
cin.ignore(100, 'n');
bookstxt >> price >> year >> numInStock;
cout << title << "n" << author << "n" << publisher << "n" << isbn << "n" << price << "n" << year << "n" << numInStock;
bookList[i].storeBook(title, author, publisher, isbn, price, year, numInStock);
}
}
问题我在 ISBN 部分遇到了问题 - 它在循环中第一次正确执行需要做的事情,但在第二次它搞砸了 isbn 并以某种方式将其的一部分推送到接下来的两个变量。以下是断开的行的输出应如下所示
The World is Flat
Friedman, Thomas
Farrar, Straus and Giroux
0-374-29279-5
30.00
2006
12
以下是实际发生的情况:
Starting Out with C++
Gaddis, Tony
Pearson
978-0-13-257625-3
129.98
2014
25
The World is Flat
Friedman, Thomas
Farrar, Straus and Giroux
0
-374
-29279
-5
30.00
2006
12
0
-374
-29279
它似乎在阅读 ISBN 部分的某个地方搞砸了。不胜感激任何帮助
您的cin.ignore()
电话在错误的位置。 getline()
吃掉它结束的换行符,所以没有什么可忽略的。>>
运算符没有,因此您需要忽略它在流中留下的空格。将cin.ignore()
移动到使用 >>
运算符之后:
while (!bookstxt.eof())
{
for (int i = 0; i < x; i++) {
getline(bookstxt, title);
getline(bookstxt, author);
getline(bookstxt, publisher);
getline(bookstxt, isbn);
bookstxt >> price >> year >> numInStock;
cin.ignore(100, 'n');
cout << title << "n" << author << "n" << publisher << "n" << isbn << "n" << price << "n" << year << "n" << numInStock;
bookList[i].storeBook(title, author, publisher, isbn, price, year, numInStock);
}
}
此外,在循环条件中使用.eof()
是一个坏主意。
这是一个解决方案。它不使用循环中的.eof()
,而是使用stringstream
来提取数值。
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;
int main () {
string title, author, publisher, isbn, empty_line;
string string_price, string_year, string_stock;
double price;
int year, stock;
ifstream bookstxt ("books.txt");
if(bookstxt.is_open()) {
while(getline(bookstxt,title))
{
getline(bookstxt, author);
getline(bookstxt, publisher);
getline(bookstxt, isbn);
getline(bookstxt, string_price);
getline(bookstxt, string_year);
getline(bookstxt, string_stock);
getline(bookstxt, empty_line);
stringstream(string_price) >> price;
stringstream(string_year) >> year;
stringstream(string_stock) >> stock;
cout << title << "n" << author << "n" << publisher << "n" << isbn << "n" << price << "n" << year << "n" << stock << "nn";
}
bookstxt.close();
} else {
cout << "Unable to open file";
}
return 0;
}
我知道您的原始books.txt
文件应该看起来像这样,如果我错了,请纠正我:
Starting Out with C++
Gaddis, Tony
Pearson
978-0-13-257625-3
129.98
2014
25
The World is Flat
Friedman, Thomas
Farrar, Straus and Giroux
0-374-29279-5
30.00
2006
12
0
祝你好运!
相关文章:
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 读取最后一行代码算法 - c++ 时出现问题
- 使用 seekg() 读取C++中的文件时出现问题
- 从矢量C++读取字符时出现问题
- 读取文件并将其存储在unordered_map中时出现问题
- 使用 minijson-reader 库读取 JSON 字符串时出现问题
- C++线程安全:如果只有一个线程可以写入非原子变量,但多个线程从中读取. 会遇到问题吗?
- 0xC0000005:访问冲突读取位置 0x00000000. 重载 == 运算符的问题
- 读取制表符分隔的文件时出现问题 C++
- 当我在 CLion 中读取数组中的 txt 文件时C++编码问题
- 我遇到使用 c++ 逐行读取输入文件的问题
- 关于读取有效 c++ 第 4 项(将非局部静态变量替换为局部静态变量)的问题
- 在Linux中使用伪终端读取问题
- 文件读取问题 C++ /C#
- 文件读取问题
- mmap共享缓冲区读取问题
- c++串口读取问题:ioctl(FIONREAD)设置了错误的值
- c++二进制文件读取问题
- c++字节读取问题
- c++文件读取问题