【发布时间】:2021-04-24 15:47:22
【问题描述】:
我有一个文本文件,其中包含整数值,每行用不同的字符分隔。
所以用户输入文件名,然后调用一个获取文件名的函数并返回读取的所有整数值的总和。
在每一行都提示用户输入分隔符。
如果文件打开失败,函数getSum() 应该通过错误输出流对象报告并返回-1。
这是我尝试过的:
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
int getSum(std::string const& fileName){
std::ifstream in(fileName);
if(!in){
std::cerr << "Unable to open input file!\n";
return -1;
}
int sum = 0;
for(std::string line; std::getline(in, line); ){
std::cout << "enter separator: ";
char separator;
std::cin.get(separator);
std::istringstream iss(line);
for(std::string strVal; std::getline(iss, strVal, separator); ){
sum += std::stoi(strVal);
}
}
return sum;
}
int main(){
std::string fileName;
std::cout << "File name: ";
std::getline(std::cin, fileName);
std::cout << getSum(fileName) << '\n';
std::cout << '\n';
}
输入文件:data.txt:
25 20 16
7 0 3
分隔符:' '
输出:
68
为什么不是猜测的71?
如果我创建char separator= ' '; 并删除std::cin.get(separator);,它会给我正确的输出:71。所以我想问题出在std::cin.get(separator)。
那么有解决办法吗?
【问题讨论】: