2016-12-15 67 views
-5

大家好我已經做了這個簡單的程序,但在輸入書名的過程中有一些問題,程序只是跳過cin.get()函數,然後返回0,而我不知道爲什麼它不工作,雖然沒有錯誤。任何幫助,將不勝感激。謝謝cin.get()不適用於字符數組

#include<iostream> 
using namespace std; 
struct book 
{ 
private: 
int bookid; 
char name[30]; 
float price; 
public: 
input() 
{ 
    cout<<"\n Enter book ID: "; 
    cin>>bookid; 
if(bookid<0) 
{ 
    bookid = -bookid; 
} 
    cout<<"\nEnter book title: "; 
    cin.get(name,30); // here is the problem 
    cout<<"\nEnter book price: "; 
    cin>>price; 
} 
display() 
{ 
    cout<<"\nBook ID: "<<bookid<<"\nbook title: "<<name<<"\nprice: "<<price; 
} 
}; 

int main() 
{ 
book b1; 
b1.input(); 
b1.display(); 


return 0; 
} 
+0

你是不是指什麼意思? – NathanOliver

+0

什麼是不專門工作?在Stack Overfow上詢問問題時,始終發佈[MCVE],包括所有錯誤消息,輸入和預期輸出。 –

+0

當我運行它時,跳過cin.get()函數 – Waleed

回答

0

試着做一個namestring,而不是一個字符數組,然後使用cin >> name;(單個字字符串)或cin.getline(name);(對於多詞串)。您必須將#include <string>添加到程序的頂部。

一般來說,不要在C++中使用字符數組(更像是C的東西)。


編輯:

我覺得你的問題是在這裏:當輸入流中檢測到'\n'

cin >> bookid;將停止,然後離開了流\n然後,當您立即致電cin.getline(name);時,它將讀取的第一個字符是'\n',因此它將立即返回,因爲「它讀取了一行」。這是cin >>cin.getline()之間的差異。

所以解決辦法是更換cin.getline(name);與

cin.getline(); 
cin.getline(name); 

這樣,它會得到和放棄單一'\n'(包括可能先於不需要'\n'任何其他空格)讀取行實際上包含名稱之前。

如果你知道一個事實,即非常下一個字符是'\n'而不是後面是'\n'其他空白的部分金額,然後你可以做cin.ignore();忽視第二天字符,即'\n'

+0

謝謝你,你的好解釋,得到了這個概念。 – Waleed