Ich versuche eine Datei zu lesen, wo die erste Zeile eine Ganzzahl ist, und die nächste Zeile ist eine Zeichenfolge (ich muss dies in ein Char-Array lesen). Ich habe den Operator >> für das Eingabe-Stream-Objekt verwendet, um die ganze Zahl zu lesen, dann habe ich die .get() -Methode und die .ignore() -Methode verwendet, um die nächste Zeile in ein char-Array zu lesen das Char-Array Ich bekomme eine leere Zeichenfolge Ich bin mir nicht sicher, warum ich eine leere Zeichenfolge, wissen Sie, warum das sein könnte?Problem beim Lesen von Datei in C++
Hier ist der Code, den ich aus der Datei zu lesen und benutze
BookList::BookList()
{
//Read in inventory.txt and initialize the booklist
ifstream invStream("inventory.txt", ifstream::in);
int lineIdx = 0;
int bookIdx = 0;
bool firstLineNotRead = true;
while (invStream.good()) {
if (firstLineNotRead) {
invStream >> listSize;
firstLineNotRead = false;
bookList = new Book *[listSize];
for (int i = 0; i < listSize; i++) {
bookList[i] = new Book();
}
} else {
if (lineIdx % 3 == 0) {
char tempTitle[200];
invStream.get(tempTitle, 200, '\n');
invStream.ignore(200, '\n');
bookList[bookIdx] = new Book();
bookList[bookIdx]->setTitle(tempTitle);
} else if (lineIdx % 3 == 1) {
int bookCnt;
invStream >> bookCnt;
bookList[bookIdx]->changeCount(bookCnt);
} else if (lineIdx % 3 == 2) {
float price;
invStream >> price;
bookList[bookIdx]->setPrice(price);
bookIdx++;
}
lineIdx++;
}
}
}
so Listsize ist die erste ganze Zahl, die von der ersten Zeile in der Datei gelesen wird, und tempTitle ist ein temporärer Puffer zum Lesen in der Zeichenfolge aus der zweiten Zeile der Datei. Aber wenn ich invStream.get() und invStream.ignore() mache, sehe ich, dass die tempTitle-Zeichenfolge leer ist. Warum?
über die erste Denken '\ n 'nach Ihrer ganzen Zahl in der ersten Zeile. –
Stellen Sie eine Beispieldatei zur Verfügung? – everettjf
Warum benutzt du 'getline()' nicht? –