作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在 Mac 上遇到代码块和 Xcode 问题。每次我在代码块上运行代码时,我都会收到 Segmentation Fault 11,当我尝试在 Xcode 上时,我会收到 Thread 1: exc_bad_access (code=1 address=0x0xffffffff0000000a)。但是,如果我通过代码块在 PC 上运行此代码,它就会运行。有谁知道如何解决这个问题,以便我可以在我的 Mac 上运行该程序。
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
struct Book
{
string isbn;
string title;
string author;
double price;
string seller;
};
int main()
{
Book booklist[100];
ifstream infile;
ofstream outfile;
//int numBooks = 0;
int i=0;
char dummy;
outfile.open("readBooks.txt");
infile.open("usedBooks.txt");
if (infile.fail())
{
cout << "The file doesn't exist";
exit(-1);
}
else
{
//for (i=0; i<100; i++)
while (!infile.eof())
{
getline (infile, booklist[i].isbn);
getline (infile, booklist[i].title);
getline (infile, booklist[i].author);
infile >> booklist[i].price;
infile.get(dummy);
getline (infile, booklist[i].seller);
outfile << "ISBN: " << booklist[i].isbn << endl;
outfile << "Title: " << booklist[i].title << endl;
outfile << "Author: " << booklist[i].author << endl;
outfile << "Price: " << booklist[i].price << endl;
outfile << "Seller: " << booklist[i].seller << endl << endl;
i++;
}
}
}
最佳答案
Book booklist[100];
使用魔数(Magic Number)是不好的做法。你确定i
在你的程序后面总是少于 100?如果不是,那么您的程序可能会做一些奇怪的事情。你应该使用 std::vector<Book> booklist;
反而。您可能还想使用 vector 的 at()
成员函数以避免索引数组超出范围时的错误。
//for (i=0; i<100; i++)
while (!infile.eof())
{
使用 .eof()
检查循环条件中的 C++ 流是 almost always wrong .相反,您可能想要:
// returns true of book is successfully read, false otherwise
bool read_book(std::istream &is, Book &book) {
Book tmp;
if (getline(is, tmp.isbn) &&
getline(is, tmp.title) &&
getline(is, tmp.author) &&
is >> tmp.price)
{
is.get(dummy);
if (getline(is, tmp.seller)) {
book = tmp; // book = std::move(tmp)
return true;
}
}
return false;
}
int main() {
std::vector<Book> booklist;
// ...
Book book;
while (read_book(infile, book)) {
booklist.push_back(book);
}
// ...
}
你应该经常检查输入操作的结果,检查eof()
在 C++ 流上没有进行正确的检查。
关于c++ - 使用文件 I/O C++ 时出现段错误 11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23139648/
我是一名优秀的程序员,十分优秀!