大家好,我已经完成了这个简单的程序,但是输入书名是一个问题,只需跳过cin.get()函数,然后返回0,我不知道为什么尽管没有错误,但它行不通。任何帮助,将不胜感激。谢谢你
#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;
}
尝试使name
成为string
而不是字符数组,然后使用cin >> name;
(对于单字字符串)或cin.getline(name);
(对于多字字符串)。您必须将#include <string>
添加到程序的顶部。
通常,请勿在C 中使用字符数组(这更多是C事物)。
编辑:
我认为您的问题在这里:
cin >> bookid;
将在输入流中检测到 'n'
时停止,,然后将该n
留在流中。然后,当您在此之后致电cin.getline(name);
时,它将读取的第一个字符是'n'
,因此它将立即返回,因为"它已经阅读了一条线"。这是cin >>
和cin.getline()
。
因此,解决方案是替换cin.getline(name)
;用
cin.getline();
cin.getline(name);
这样,它将获得并丢弃单个'n'
(包括可能在不需要的'n'
之前的任何其他空格),然后才能读取实际上包含名称的行之前。
如果您知道下一个字符是 'n'
而不是其他数量的witepace,然后是 'n'
,那么您只能做cin.ignore();
即可忽略下一个字符,即'n'
。em>