2016-12-15 47 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

相关问题