c++ - 为什么这个程序的结果是三个十进制数 "597, 295, 295,"输入两个十六进制数 "255 127<enter>"

标签 c++ stringstream

<分区>

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <iomanip>
#include <sstream> using namespace std;

void printer(int i) {
    cout << setw(4) << i << ", "; }

int main() {
    string s;
    getline(cin, s);
    stringstream input(s); //LINE I
    vector<int> v1;
    int i;
    do {
        input >> hex >> i;
        v1.push_back(i); //LINE II
    } while (!input.fail());
    for_each(v1.begin(), v1.end(), printer);
    return 0; }

类似地,该程序输出t, r, e, e, 文件内容t r e。我相信原因与上述问题非常相似。

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <iomanip>
#include <fstream>
using namespace std;
void printer(char c) {
        cout << setw(2) << c << ", ";
}
int main ()
{
        ifstream inputfile("input.txt");
        vector<char> v1;
        char c;
        do 
        {
                inputfile>>c;//LINE I
                v1.push_back(c);
        } 
        while (inputfile.good());//LINE II
        inputfile.close();
        for_each(v1.begin(), v1.end(), printer);
        return 0;
}

这些是来自评估的问题。我需要了解原因。当然,知道纠正也会提高我的技能。但我需要解释为什么它不能那样工作。

最佳答案

您首先尝试读取,然后将结果推送到 vector,然后检查是否发生错误。这个顺序是错误的。

while (true) {
    input >> hex >> i;
    if (input.fail())
        break;
    v1.push_back(i);
}

关于c++ - 为什么这个程序的结果是三个十进制数 "597, 295, 295,"输入两个十六进制数 "255 127<enter>",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34173264/

相关文章:

c++ - "stringstream>>something"的返回值是多少?

c++ - 清空字符串流的最佳方法?

当到达字符串末尾时,C++ getline 导致段错误

c++ - 普通顶点结构中的 textureMappingu/v?

c++ - 文件二进制与文本

c++ - 二叉树递归插入错误

c++ - 在 C++ 中相互交换数组的部分

C++,DirectX 9 : Render Self-made Vertex Struct

c++ - 使用运算符将​​字符串流传递给 istream >>

c++ - std :ostringstream and -std=c++11? 内存错误