为什么这个程序的结果是三个十进制数&#34; 597,295,295,&#34;用于输入两个十六进制数字&#34; 255 127 <enter>&#34;

时间:2015-12-09 07:42:16

标签: 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;
}

这些是评估中的问题。我需要了解为什么。当然,了解更正也会提高我的技能。但我需要解释为什么它不起作用。

2 个答案:

答案 0 :(得分:2)

首先尝试读取,然后将结果推送到矢量,而不是检查是否发生错误。那顺序错了。

    var barData = {
            labels: ['CityA', 'CityB', 'CityC', 'CityD', 'CityF', 'CityG'],
            datasets: [
    {
        label: '2010 customers #',
        fillColor: '#382765',
        data: [2500, 1902, 1041, 610, 1245, 952]
    },
    {
        label: '2014 customers #',
        fillColor: '#7BC225',
        data: [3104, 1689, 1318, 589, 1199, 1436]
    }
]
};

答案 1 :(得分:1)

替换

do 
{
        inputfile>>c;//LINE I
        v1.push_back(c);
} 
while (inputfile.good());//LINE II

input >> hex >> i;
while (!input.fail()) {
    v1.push_back(i); //LINE II
    input >> hex >> i;
}

注意如果您的输入为空,则第二个版本也是正确的。首先检查输入,然后将其插入矢量。