cin.get()不适用于char阵列

cin.get() is not working for char array

本文关键字:适用于 char 阵列 不适用 get cin      更新时间:2023-10-16

大家好,我已经完成了这个简单的程序,但是输入书名是一个问题,只需跳过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>