简体   繁体   English

从文件 C++ 中读取数字

[英]Reading numbers from file c++

I want to read numbers from text file.我想从文本文件中读取数字。 The file contains following numbers.该文件包含以下编号。

3 5 7 9 20 25 30 40 55 56 57 60 62 1 4 7 11 14 25 44 47 55 57 100 -5 100 1000 1005 -12 1000 1001

Space separates numbers.空格分隔数字。 I had to make some code to read this but the problem is that reading the numbers at the end of line are not correct and I don't know how to read them properly(Problem with CRLF chars);我不得不编写一些代码来阅读这个,但问题是读取行尾的数字不正确,我不知道如何正确读取它们(CRLF 字符问题); Can someone help me with this?有人可以帮我弄这个吗? Here is my code.这是我的代码。

Header base.h头文件base.h

#include <iostream>
#include <fstream>
#include <string.h>
#include <cstdlib>
using namespace std;

class L
{
    public:
    int value;
};

class t
{
public:
    L *line;
    t(){
        line = new L[10000];
    }
};

class baza
{
public:
    ifstream in;
    ofstream out;
    string lines;
    char word1[1] ;
    int wordint;
    char tab[255];
    int *tab2;

    int x;
    int y;
    int z;
    int a;
    int b;
    int c;
    int ile;

    int multiplier;
    bool negative ;
    int negative;
    t *table;

    base();
};

Here are base.cpp这里是base.cpp

#include "base.h"

base::base()
{
    wordint=0;
    a=2000;
    b=0;
    tab2 =new int [a];
    x=0;
    y=0;
    z=0;

    for(int i=0;i<a;i++)
    {
        tab2[i]=0;

    }
    multiplier=1;
    negative =false;
    negative1=-1;
    lines="0";
    ile=0;
    in.open("in.txt");   //open file

    do   
    {
        getline(in,lines);
        if(lines!="0")      //how many lines is in the file
        {
            ile++;
        }
    } while(in.eof()!=true);
    in.close();
    tablica =new t[ile];
    tab5 = new int[ile];
    in.open("in.txt");

    for(int i=0;i<ile;i++)
    {
        do
        {
            in.get(word1[0]);
            if(word1[0]==45)   // check if sign is negative
            {
                word1[0]=0;
                negative=true;
                in.get(word1[0]);
            }
            if(word1[0]!= 10)  //check if  not LF
            {
                if(word1[0]!=' ')  //check if not space
                {
                    tab[x]= word1[0];
                    x++;
                }
            }
            if(word1[0]==' ')  //if space then convert from char to int 
            {
                y=x-1;
                do {
                    word1[0]=tab[y];
                    wordint=atoi(word1);
                    wordint=wordint*multiplier;
                    tab2[z]=tab2[z]+wordint;
                    y--;
                    multiplier=multiplier*10;
                } while(y>=0);
                x=0;
                multiplier=1;
                if(negative==true)  //check if negative
                {
                    tab2[z]=tab2[z]*negative1;
                    negative=false;
                }
                z++;
                c=z;
                tab5[i]=c;
            }
            /**if(word1[0]== '10')  //its not work but same as above only check if LF
            {
                y=x-1;
                do{
                    word1[0]=tab[y];
                    wordint=atoi(word1);
                    wordint=wordint*multiplier;
                    cout<<"dupa";
                    tab2[z]=tab2[z]+wordint;
                    y--;
                    multiplier=multiplier*10;
                } while(y>=0);
                x=0;
                multiplier=1;
                if(negative==true)  //check if negative
                {
                    tab2[z]=tab2[z]*negative1;
                    negative=false;
                }
                z++;
                c=z;
                tab5[i]=c;
            }*/

        } while(word1[0]!=10);
        for(int j=0;j<z;j++)      //write to table
        {
            table[i].line[j].value=tab2[j];
            cout<< table[i].line[j].value<<endl;
            tab2[j]=0;
        }
        z=0;
    }
}

This will read all the numbers from the file into a std::vector<int> :这会将文件中的所有数字读入std::vector<int>

#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

vector<int> read_numbers(string file_name)
{
    ifstream infile;
    infile.open(file_name);
    vector<int> numbers;

    if (infile.is_open())
    {
        int num; 
        while(infile >> num)
        {
            numbers.push_back(num);
        }
    }

    return numbers;
}

You should simply combine examples as below:您应该简单地结合以下示例:

Your code will look way smarter than what you posted and should work.你的代码看起来比你发布的更聪明,应该可以工作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM