cin.get()不适用于char数组

时间:2016-12-15 18:22:24

标签: c++

大家好我已经制作了这个简单的程序但是在输入书名时出现了一些问题,程序只是跳过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;
 }

1 个答案:

答案 0 :(得分:0)

尝试将name设为string而不是字符数组,然后使用cin >> name;(对于单字符串)或cin.getline(name);(对于多字符串) )。您必须将#include <string>添加到程序的顶部。

通常,不要在C ++中使用字符数组(这更像是C语言)。

编辑:

我认为你的问题在这里:

cin >> bookid;会在输入流中检测到'\n'时停止,然后将\n保留在流中。然后,当您致电{时{1}}之后,它将读取的第一个字符是cin.getline(name);,因此它会立即返回,因为“它已经读取了一行”。这是'\n'cin >>之间的差异。

所以解决方案是替换cin.getline();与

cin.getline(name)

这样,在读取实际包含名称的行之前,它将获取并丢弃单个cin.getline(); cin.getline(name); (包括可能在不需要的'\n'之前的任何其他空格)。

如果您知道下一个字符是'\n'而不是'\n'之后的其他一些空格,那么您可以'\n'来忽略下一个字符,即cin.ignore();