- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我调用 stringstream
时,stringstream::ignore()
似乎总是失败,即使这是在调用 stringstream::clear()
之后完成的:
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <cassert>
using namespace std;
int main() {
int a, b;
stringstream ss;
string str;
ifstream inFile("file.txt");
if(!inFile) {
cerr << "Fatal: Cannot open input file." << endl;
exit(1);
}
while(getline(inFile, str)) {
ss << str; // read string into ss
ss >> a >> b; // stream fails trying to store string into int
ss.clear(); // reset stream state
assert(ss.good()); // assertion succeeds
ss.ignore(INT_MAX, '\n'); // ignore content to next newline
assert(ss.good()); // assertion fails, why?
}
return 0;
}
file.txt
包含以下文本:
123 abc
456 def
为什么 ss.good()
之后 ss.ignore()
为假?
最佳答案
std::endl
输出 \n
并冲洗流。然而,stringstream::flush()
是没有意义的,什么都不做。 flush
仅当底层缓冲区绑定(bind)到终端等输出设备时才有意义,但是,stringstream
无处刷新内容。如果您想清除字符串流的内容,请执行 ss.str("");
反而。但是,我可能会将代码更改为以下内容:
while(getline(inFile, str)) {
ss.str(str); // call ss.str() to assign a new string to the stringstream
if(!ss >> a >> b) // check if stream fails trying to store string into int
{
ss.clear(); // Read failed, so reset stream state
}
else
{
// Read successful
}
// Do other stuff
}
此外,如果你想在字符串流中插入一个换行符,只需执行 ss << '\n';
不要调用std::endl
.
关于c++ - stringstream::ignore(INT_MAX, '\n') 导致流失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12541049/
我正在学习计算机体系结构,并决定尝试乘法溢出。观察到 INT_MAX * INT_MAX 溢出,但我不确定为什么这会在 C/C++ 中给出乘积 1。 #include #include int m
我正在学习计算机体系结构,并决定尝试乘法溢出。观察到 INT_MAX * INT_MAX 溢出,但我不确定为什么这会在 C/C++ 中给出乘积 1。 #include #include int m
我的印象是 INT_MAX 将打开 int 的所有 32 位。如果我否定它并与它本身“和”,我应该将全 0 与全 1 进行比较并返回 false。我错过了什么? int x = INT_MAX; x
我想解决一些关于溢出的问题。我有一些数据使用int来存储,数据不会导致溢出但计算中间可能会导致溢出。 比如我需要存储正方形的对角线,边长是50000,所以对角线是70710,边和对角线都远小于INT_
enum Some_Flag { SOME_FLAG_A = 0x00000000u, SOME_FLAG_B = 0x00000001u, SOME_
如何在 C 语言中仅使用按位运算符获取 INT_MAX 的值?我希望 ~0 为 1111111111(1 的补码,所以十进制 -1)和 ~ 0 >> 1 为 0111111111,这将是最大值,但它仍
我在/usr/include/limits.h 中找到了以下定义: #define INT_MIN (-INT_MAX - 1) #define INT_MAX 2147483647 此外,似乎此头文
下面是一段代码,用于检查给定数字是否为 Lychrel 数字。这基本上意味着该程序取一个数及其倒数之和,然后取那个数及其倒数之和,等等,直到找到回文。如果它在一定的迭代次数内没有找到这样的数字(我在这
我在做逆向工程的时候遇到了宏INT_MAX,但是找不到它的值。那么预处理器如何知道它的值呢? 最佳答案 如果你#include (或 C++ 中的 )然后 INT_MAX保证被定义。 它是否真的出现
我的 C 程序执行“Turmrechnung”(预定义的数字(“init_num”乘以预定义的数字范围(init_num*2*3*4*5*6*7*8*9 在我的例子中,由变量“h”定义),然后除以那些
从昨天开始,我一直试图在链表中找到最小的两个数字,但仍然无法做到,所以决定在 stackoverflow 上提问。 我这样做的逻辑是: (1) 首先设置min1->freq和min2->freq为IN
我得到了这段代码: char a[151]; scanf ("%150s", a); 在a可能是一个数字,如果是这样,我需要确定,如果 a INT_MAX) Overflow(); // gr
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
如果我尝试应用:Integer.valueOf(String.valueOf(Integer.MAX_VALUE) + "9"); 我得到一个 NumberFormatException。 但我需要从
在 C++ 中,有符号类型的溢出是未定义的行为。以下示例是否也是未定义的行为? #include int f() { int a = INT_MAX; int b = -1; retur
这个问题已经有答案了: Why is unsigned integer overflow defined behavior but signed integer overflow isn't? (7
嗯,我觉得我的问题比其他问题更复杂一些。我在尝试解决这个问题时意识到了这一点。 我尝试使用 int number = rand() % (INT_MAX - INT_MIN + 1) + INT_MI
为什么这段代码不会产生编译时错误? INT_MAX 是一个宏,它保存可以存储在 int 中的最大值,但是 minVal 没有声明,当我打印它时,它会产生 0 的值。我正在使用 c99 进行编译。 #i
这个问题在这里已经有了答案: for every int x: x+1 > x .... is this always true? (4 个答案) 关闭 9 年前。 for (i = 0; i <=
我从用户输入中得到 long(使用 fgets() 并使用 strtoul() 转换为 long),但是在测试它以转换为整数时给出错误的结果. 声明: char buf[BUFSIZE]; unsig
我是一名优秀的程序员,十分优秀!