cin.get()不适用于char阵列
cin.get() is not working for char array
大家好,我已经完成了这个简单的程序,但是输入书名是一个问题,只需跳过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>
相关文章:
- FLTK 2.0构建和演示,适用于VS2019的2011年左右的代码库
- C++17 - 使用自定义分配器的节点提取/重新插入 - 适用于 clang++/libc++,但不适用于 libstd
- "string.h"在构建适用于iOS的qt应用程序中找不到消息
- 适用于 WebView2 旧版本的示例应用程序
- 在 NVIDIA GEFORCE GTX 1050 上下载适用于 Windows 10 的 openCL 1.2
- __attribute__(优化(0))) 是否适用于"recursively"?
- 为什么 std::erase(std::erase_if) 不是适用于<algorithm>任何容器的模板?
- 使用一个参数的模板函数时出错(适用于 2)
- 使用 适用于 Android 和 iOS 的 tf-lite C++ API
- 为什么这适用于 G++ 而不是 CLANG?
- 适用于 macOS 的 Xcode 应用程序。这就是我设置从USB麦克风输入获取音频的方式。一年前工作,现在没有了。为什么
- 适用于 Linux 的 c++ 上的代理脚本
- 为什么我的 SFINAE 表达式不再适用于 GCC 8.2?
- 使输出流式处理运算符适用于 boost::variant<std::vector<int>、int、double 的正确方法是什么>
- 有没有适用于Windows.lib文件的GNU二进制文件描述符(BFD)
- 模板函数仅适用于VS
- 模板的类型定义包括char[][] - 适用于VS2008,但不适用于gcc
- 错误:无法在赋值中将"char*"转换为"int*"(也适用于'double*'转换为"int*")
- 为什么“equal”在C++中适用于const char*
- InvokeMethod 不适用于 SLOT(...),但适用于 conts char *