- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
最近我需要一个简单的程序来对标准输入中出现的所有整数求和,每行一个整数。输入碰巧包含一些未设置的行,包含一个减号('-'),还有一些带有垃圾字符的行(将被忽略)。
我相信这将是一个微不足道的程序。但事实证明,单个减号的行为与其他错误输入不同。在正常的非整数输入上,失败标志被设置并且错误的输入保留在输入缓冲区中。但是使用单个减号(或加号)会设置失败标志,但会删除 +/- 号,从而导致程序跳过下一个(有效)整数(导致总和错误)。
我写了一个小测试程序(如下)来分析行为。上述带有 +/- 符号的行为是错误还是功能?
#include <iostream>
using namespace std;
int main()
{
string s;
int n;
while (true)
{
n = -4711;
cin >> n;
cerr << (cin.bad() ? "ERROR: badbit is set\n" : "");
cerr << (cin.fail() ? "ERROR: failbit is set\n" : "");
cerr << (cin.eof() ? "ERROR: eofbit is set\n" : "");
if ( cin.bad() || cin.eof() )
break;
if ( cin.fail() )
{
cin.clear();
cin >> s;
cerr << "ERROR: ignored string '" << s
<< "' (integer is '" << n << "')" << endl;
}
else
{
cout << "OK: read integer '" << n << "'" << endl;
}
}
return 0;
}
运行程序(输入:“1 asdf 2 - 3 + 4 qwer 5”):
~ $ ./a.out
1 asdf 2 - 3 + 4 qwer 5
OK: read integer '1'
ERROR: failbit is set
ERROR: ignored string 'asdf' (integer is '0')
OK: read integer '2'
ERROR: failbit is set
ERROR: ignored string '3' (integer is '0')
ERROR: failbit is set
ERROR: ignored string '4' (integer is '0')
ERROR: failbit is set
ERROR: ignored string 'qwer' (integer is '0')
OK: read integer '5'
(我已经通过读取字符串解决了我原来的问题,并使用 C++11 stoi 来识别错误输入。)
编辑:如果有人对我原来问题的解决方案感兴趣:
#include <iostream>
#include <string>
using namespace std;
int main()
{
int sum = 0;
string n;
while ( cin >> n )
{
try {
sum += stoi(n);
cout << n << endl;
}
catch (exception& e)
{
cerr << e.what() << " ERROR: '" << n << "' is not a number." << endl;
}
}
cout << sum << endl;
return 0;
}
最佳答案
这是一个功能。 cin
在读取“-”之后的空格后才知道输入有误。没有可移植的方法使用 iostreams 放回超过一个字符,也没有可移植的方法在 cin 中查找。所以它被卡住了,必须保留读取的“-”。
在读取数据时有一个观点,它对您自己的解析更好。将所有数据读入字符串,然后自己解析这些字符串,以确定哪些是真实的,哪些是垃圾。这样您就可以完全控制,而不是与 iostream 做的任何事情作斗争。
关于c++ - 跳过整数输入中的单个减号或加号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15453383/
最近有人告诉我,+ (前一个模式/字符的一次或多次出现)不是基本正则表达式的一部分。甚至写为 \+ 时也不行. 这是关于最大兼容性的问题。 我的印象是…… echo "Hello World, I a
我正在寻找电话号码的正则表达式,但似乎找不到我需要的东西。 要求 以加号(可选)开头,例如。 +442021234 允许括号(可选)例如。 (+44)2021234 允许任意长度的数字 允许数字之间的
假设我使用 gsub 并希望从字符串中删除以下 (=,+,-) 符号并替换为下划线。 有人可以描述当我尝试使用带加号 (+) 的 gsub 时发生的情况吗? test<- "sandwich=brea
我一直在寻找一种方法来将我自己的自定义符号字符添加到正数和负数中,但似乎没有一种标准的方法可以做到这一点。 IOStreams 中的加减号是否已国际化?我能找到的最接近覆盖它的是 std::money
过去几天我一直在开发菜单。它将用作可扩展/可折叠(甚至是一个词吗?)菜单。现在我让菜单默认垂直变大,然后当你点击“+/-”按钮时,尺寸垂直减小。你再次点击它,然后它在垂直方向上变大......等等。
你好,我正在阅读 Mach7 的以下代码(顺便说一句,看起来不错,我想知道为什么 c++17 没有采用它,但那是题外话……) bool operator==(const Term& left, con
我正在尝试通过玩 Arduino Uno 来学习 C。我正在审查 code for the Colorduino library on github .我想知道 ++ 在应用于结构时如何工作。 在 C
我正在使用 PHP 和我的短信服务提供商提供的 API key 向手机发送短信。 我发送的短信完美地到达了目标手机,但问题是当我有一个 "+" 登录我的消息时 "+" 没有出现在手机。这可能是因为 "
我一直在寻找有关立即调用函数的信息,在某个地方我偶然发现了这种表示法: +function(){console.log("Something.")}() 有人可以向我解释一下函数前面的 + 符号的含义
mvn dependency-tree有什么区别'+' 和 '\' 之间的输出。这对我来说似乎相当随意,但我确定这不是...... +- com.tom:artifact:pom:6.0.0:comp
抱歉,如果这些问题是 JS 的基础知识之一。 问题 1。 我试图让代码检测位于外部数组内部的内部数组, 数组的结构是这样的; var array = ['鲍勃', ['蒂姆', '凯蒂', '佐伊']
我正在制作一个计算器程序,但在使用加法功能时遇到问题。我有其他功能(“/”、“-”、“*”)工作,但加号(“+”)不起作用。 html 和 JavaScript 包含在下面... RDaniel
这个问题已经有答案了: How to encode the plus (+) symbol in a URL (6 个回答) 已关闭 3 个月前。 我找不到任何地方,我认为这是独特的问题。 我想添加以
这是我在网上找到的一个正则表达式,似乎在简单的电子邮件地址验证方面做得很好。问题是它不允许在电子邮件中使用 +,例如 my+email@domain.com。我不擅长正则表达式,那么如何在不破坏整个东
我无法下载图片: http://www.wallpick.com/wp-content/uploads/2014/02/08/Water+Sports_wallpapers_242-640x480.j
我想知道如何在 Javascript 中将变量作为 +4 传递,然后在 php 中将其作为 +4 检索。 无论我做什么,每当我存储一个+4",并验证它是这样存储的,当我检索它时,+ 就消失了,我所有的
这个问题的答案是community effort 。编辑现有答案以改进这篇文章。它目前不接受新的答案或互动。
这个问题的答案是community effort 。编辑现有答案以改进这篇文章。它目前不接受新的答案或互动。
这个问题的答案是community effort 。编辑现有答案以改进这篇文章。它目前不接受新的答案或互动。
谁能帮助我理解使用 isinstance 时加号 (+) 的用途。 In [76]: isinstance('qwert', string) Out[76]: True In [77]: isinst
我是一名优秀的程序员,十分优秀!