Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何读取文件中每行由不同分隔符分隔的整数值?_C++_Fstream - Fatal编程技术网

C++ 如何读取文件中每行由不同分隔符分隔的整数值?

C++ 如何读取文件中每行由不同分隔符分隔的整数值?,c++,fstream,C++,Fstream,我有一个文本文件,其中包含整数值,每行用不同的字符分隔 因此,用户输入文件名,然后调用使用文件名的函数,并返回读取的所有整数值之和 在每一行上,都会提示用户输入分隔符 如果文件打开失败,函数getSum()应通过错误输出流对象报告该错误,并返回-1 以下是我尝试过的: #include <iostream> #include <fstream> #include <sstream> #include <string> int getSum(st

我有一个文本文件,其中包含整数值,每行用不同的字符分隔

因此,用户输入文件名,然后调用使用文件名的函数,并返回读取的所有整数值之和

在每一行上,都会提示用户输入分隔符

如果文件打开失败,函数
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';
}
分隔符:“”

输出:

68
为什么不像猜测的那样是
71

如果我把
字符分隔符=''并删除
std::cin.get(分隔符)它给了我正确的输出:
71
。所以我想问题在于
std::cin.get(separator)

有解决办法吗?

问题是:

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); //every time the for-loop loops, this happens again, resetting separator
        std::istringstream iss(line);
        for(std::string strVal; std::getline(iss, strVal, separator); ){
            sum += std::stoi(strVal);
        }
    }

    return sum;
}
intgetsum(标准::字符串常量和文件名){
std::ifstream-in(文件名);
如果(!in){

问题是我想在每行输入一次分隔符。例如,文件包含:
25;16;7 0 3
,因此第一行分隔符是分号,而第二行分隔符是单个空白。
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); //every time the for-loop loops, this happens again, resetting separator
        std::istringstream iss(line);
        for(std::string strVal; std::getline(iss, strVal, separator); ){
            sum += std::stoi(strVal);
        }
    }

    return sum;
}
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;
    std::cout << "enter separator: ";
    char separator;
    separator = std::cin.get(); //get separator BEFORE the for-loop

    for (std::string line; std::getline(in, line); ) {
        std::istringstream iss(line);
        for (std::string strVal; std::getline(iss, strVal, separator); ) {
            sum += std::stoi(strVal);
        }
    }

    return sum;
}