2015-05-07 1 views
1

Я написал несколько кодов ниже. Типы title и authors - это массив символов, и я не могу его изменить. Когда данные вводятся с клавиатуры, результат является нормальным.Дисплей ненормальный для чтения txt-файла

void BookException::getBook() 
{ 
    cout<<"Id number: "; 
    cin>>booknum; 
    cout<<"Title: "; 
    cin.ignore(numeric_limits<streamsize>::max(), '\n'); 
    cin.getline(title, sizeof(title), '\n'); 
    cout<<"Authors: "; 
    cin.getline(authors, sizeof(authors), '\n'); 
    cout<<"Number of pages:"; 
    cin>>pagenum; 
    cout<<"Price: "; 
    cin>>price; 
    cout<<"over"<<endl; 
} 

Вот ввод текст ниже

1 
How to program C++ 
Paul Deitel, Harvey Deitel 
1028 
112.83 

Но когда я пытаюсь читать текст из текстового file.It displaied так:

Id number: Title: Authors: Number of pages:Price: The no. 0 book error. Title: Authors: Number of pages: 0 Price: 0.00 Incorrect price. Я думаю getline из-за проблемы, но Я не знаю, как это исправить. Благодарю вас.

ответ

1

Я не вижу, как файл передается или открывается в вашем коде. Также вы никогда не печатаете ни одну из переменных после того, как прочитаете их или символы новой строки. Использование строк было бы намного проще, но если вам нужно использовать массивы char, я бы предложил написать функцию для преобразования из c-string в строку и обратно, см.: c_str().

void BookException::getBook() { 

    string booknum, title, authors, pagenum, price; 
    ifstream fin;   //file in 
    fin.open("book.txt"); //Open the file 


    getline(fin, booknum); //Read line from file first 
    cout << "Id number: " << booknum << endl; //Then print 
    getline(fin, title); 
    cout << "Title: " << title << endl; 
    getline(fin, authors); 
    cout << "Authors: " << authors << endl; 
    getline(fin, pagenum); 
    cout << "Number of pages:" << pagenum << endl; 
    getline(fin, price); 
    cout << "Price: " << price << endl; 
    cout << "over" << endl; 

    fin.close(); //Close the file 
} 

Я предлагаю читать это, если вы не понимаете все это: input/output with files

getline() использования можно найти here.