C++ c++;:cin.getline在单独的情况下被忽略

C++ c++;:cin.getline在单独的情况下被忽略,c++,getline,C++,Getline,由于某些原因,字符串cin.getline(temp.Autor,20)被忽略。请看一看 你能帮我理解为什么吗 struct BOOK { char Autor[20]; char Title[50]; short Year; int PageCount; double Cost; }; void new_book() { BOOK temp; system("cls"); cout &l

由于某些原因,
字符串cin.getline(temp.Autor,20)
被忽略。请看一看 你能帮我理解为什么吗

struct BOOK {
    char Autor[20]; 
    char Title[50]; 
    short Year; 
    int PageCount;
    double Cost;
};                  

void new_book()
{
    BOOK temp;
    system("cls");
    cout <<"ENTERING NEW BOOK: " << endl <<endl;
    cout <<"Input the author: ";
    cin.getline (temp.Autor, 20);
    cout  <<"Input the title: ";
    cin.getline (temp.Title, 50);
    cout  <<"Input the year of publishing: ";
    cin >>  temp.Year;
    cout  <<"Input the number of pages: ";
    cin >>  temp.PageCount;
    cout  <<"Input the cost: ";
    cin >>  temp.Cost;
    cout << endl;   
    print_book(temp);
    system("pause");
}
struct BOOK{
char-Autor[20];
字符标题[50];
短年;
整数页计数;
双重成本;
};                  
作废新书()
{
书本温度;
系统(“cls”);
库特
“不是我发明了这样的结构,我不能改变它。”

谁是C++ C++ C++的一个敌人,他是一个坏的家伙,他是C++的敌人,尤其是现代C++。即使他在计算机科学方面有博士学位,他还是个坏家伙,不知道从哪里开始学习C++。他在CS的其他概念中可能是好的,但是他在C++中不太好。NC++是<强>不>强>坏。

现在回到结构。给他看这个结构:

struct Book 
{
    std::string Author; 
    std::string Title; 
    short Year; 
    int PageCount;
    double Cost;
}; 
问他这个结构有什么问题,尤其是
std::string
成员的问题?问他为什么不喜欢这个而不是char数组。为什么他认为原始char数组比
std::string

不管他想出什么理由,只要告诉他:看在上帝的份上,学习真实的C++。 学习原始字符数组、指针或内存管理没有错。重点是这些概念应该在课程的后期教授,而不是在开始。我重复一遍,而不是在开始。你的作业确实表明这是课程的开始。因此,在开始时,应该教学生
标准库中的std::string
std::vector
和其他容器以及算法

一旦学生们学习了这些,他们就可以继续学习如何实现它们,其中包括原始数组、指针、内存管理等细节。这些都是伴随问题和惯用解决方案而来的高级主题,最流行的是RAII,它优雅地解决了内存管理。也就是说,学生永远不应该单独学习
新建
删除
,他应该与之一起学习

现在回到如何将数据读入先前定义的结构的成员:

Book book;

//assuming each value is on its own line!
if ( !std::getline(std::cin, book.Author) ) 
{
     std::cerr << "Error while reading Author \n";
}
//read data into other members
Book;
//假设每个值都在自己的行上!
if(!std::getline(std::cin,book.Author))
{

std::cerr当发现空格时,
cin
函数停止读取。使用
getline
读取作者和书名

阅读此问题了解更多信息:


如果您没有被强制使用字符数组,我建议切换到
std::string
并使用
std::getline
。之前是否有其他输入?(例如,书籍数量)您可能未读“\n”在其中一个prev输入字符串的末尾。之后,阅读此行的其余部分,即nothing@Kifsif:你可能会很高兴(直到你射中自己的脚),但你的用户不会。毕竟,谁说“Christos Dimitriou Papakyriakopoulos”是一个无效作者?@Kifsif:“不是我发明了这样的结构,我不能改变它。”不管是谁想出这个结构,都是一个坏家伙。他是C++的敌人,尤其是现代C++。你的代码看起来不错,问题必须在你把其他东西放在CIN中的其他例程中。你可以尝试在读取“Autor”之前添加CIN。