所以我试图从cin获得有效的整数输入,并使用了这个问题的答案.
它建议:
#include <Windows.h> // includes WinDef.h which defines min() max()
#include <iostream>
using std::cin;
using std::cout;
void Foo()
{
int delay = 0;
do
{
if(cin.fail())
{
cin.clear();
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
cout << "Enter number of seconds between submissions: ";
} while(!(cin >> delay) || delay == 0);
}
Run Code Online (Sandbox Code Playgroud)
这给了我一个关于Windows的错误,说max宏没有采用那么多的参数.这意味着我必须这样做
do
{
if(cin.fail())
{
cin.clear();
#undef max
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
cout << "Enter number of seconds between submissions: ";
} while(!(cin >> delay) || delay …Run Code Online (Sandbox Code Playgroud) 来自Stroustrup的TC++ PL,第3版,第21.3.3节:
如果我们尝试读入变量v并且操作失败,则v的值应该保持不变(如果v是istream或ostream成员函数处理的类型之一,则它不会改变).
以下示例似乎与上述引用相矛盾.基于上面的引用,我期待v的值保持不变 - 但它会变为零.对这种明显的矛盾行为有什么解释?
#include <iostream>
#include <sstream>
int main( )
{
std::stringstream ss;
ss << "The quick brown fox.";
int v = 123;
std::cout << "Before: " << v << "\n";
if( ss >> v )
{
std::cout << "Strange -- was successful at reading a word into an int!\n";
}
std::cout << "After: " << v << "\n";
if( ss.rdstate() & std::stringstream::eofbit ) std::cout << "state: eofbit\n";
if( ss.rdstate() & std::stringstream::failbit ) std::cout << "state: failbit\n"; …Run Code Online (Sandbox Code Playgroud) 我用C++编写了一个非常基本的程序,它要求用户输入一个数字,然后输入一个字符串.令我惊讶的是,在运行程序时,它永远不会停止询问字符串.它只是跳过了它.在对StackOverflow进行一些阅读后,我发现我需要添加一行说:
cin.ignore(256, '\n');
Run Code Online (Sandbox Code Playgroud)
在获取字符串输入的行之前.添加修复问题并使程序正常工作.我的问题是为什么C++需要这一cin.ignore()行,我如何预测何时需要使用cin.ignore()?
这是我写的程序:
#include <iostream>
#include <string>
using namespace std;
int main()
{
double num;
string mystr;
cout << "Please enter a number: " << "\n";
cin >> num;
cout << "Your number is: " << num << "\n";
cin.ignore(256, '\n'); // Why do I need this line?
cout << "Please enter your name: \n";
getline (cin, mystr);
cout << "So your name is " << mystr << "?\n";
cout << "Have a nice …Run Code Online (Sandbox Code Playgroud) 我在夏天一直使用"Accelerated C++"来学习C++,并且有一个我似乎无法理解的概念.
为什么是
int x;
if (cin >> x){}
Run Code Online (Sandbox Code Playgroud)
相当于
cin >> x;
if (cin){}
Run Code Online (Sandbox Code Playgroud)
通过查看代码,在我看来,我们使用cin作为变量.但是,我认为这是一个功能.为什么我们可以以这种方式使用cin,因为它是x,它具有我们输入键盘的任何值?
我已经重定向"cin"来从文件流中读取cin.rdbug(inF.rdbug())
当我使用提取操作符时,它会读取它直到它到达空格字符.
是否可以使用另一个分隔符?我在cplusplus.com上浏览了api,但没有找到任何东西.
早些时候我发布了一个关于cin跳过输入的问题,我得到了刷新和使用的结果istringstream,但现在我尝试了所有可能的解决方案,但它们都没有工作.
这是我的代码:
void createNewCustomer () {
string name, address;
cout << "Creating a new customer..." << endl;
cout << "Enter the customer's name: "; getline(cin, name);
cout << "Enter the customer's address: "; getline(cin, address);
Customer c(name, address, 0);
CustomerDB::addCustomer(c);
cout << endl;
}
Run Code Online (Sandbox Code Playgroud)
但我仍然得到同样的东西,跳过输入,当它确实需要输入时,它需要它们并且名称中的存储空白,并且在地址中它采用我在名称中写的但是从第二个字母到结尾
我的代码出了什么问题?
我尝试了cin.ignore(),cin.get()和cin.clear()所有的人一起,独自一人,没有一次成功
编辑:
main.cpp中的main方法mainMenu()只调用
void mainMenu () {
char choice;
do {
system("cls");
mainMenuDisplay();
cin >> choice;
system("cls");
switch (choice) {
case '1': …Run Code Online (Sandbox Code Playgroud) 我需要以下程序来获取整行用户输入并将其放入字符串名称:
cout << "Enter the number: ";
int number;
cin >> number;
cout << "Enter names: ";
string names;
getline(cin, names);
Run Code Online (Sandbox Code Playgroud)
然而,使用cin >> number命令之前的getline()命令(我猜这是问题),它不允许我输入名称.为什么?
我听说过一个关于cin.clear()命令的事情,但我不知道这是如何工作的,或者为什么这甚至是必要的.
这不起作用:
string temp;
cout << "Press Enter to Continue";
cin >> temp;
Run Code Online (Sandbox Code Playgroud) 我正在读一本关于C++的书,它说如果我使用>>运算符,它会返回运算符左侧的对象,所以在这个例子中
Run Code Online (Sandbox Code Playgroud)std::cin >> value1;
代码返回std::cin.
但是,如果我这样做
while(std::cin >> value1)
Run Code Online (Sandbox Code Playgroud)
我的代码将处于循环中,直到出现std::cin错误,因此必须表示运算符bool在std::cin未失败时返回true,在失败时返回false std::cin.
哪一个是它?
c++ ×10
cin ×10
getline ×3
delimiter ×1
if-statement ×1
ignore ×1
input ×1
io-buffering ×1
iostream ×1
newline ×1
state ×1
stream ×1
string ×1
stringstream ×1
variables ×1
whitespace ×1