从文本文件中读取整数

时间:2017-01-18 04:40:56

标签: c++ parsing text input file-io

对于我正在处理的项目,我试图从文本文件中读取整数。在这种情况下,它们被格式化为变量,例如U = 220V,所以我试图在等号到V之后读取。这是我提出的代码:

if (word[0] == 'U') {

                //declaring variables for checking for certain letters
                char v = 'V';
                char m = 'm';
                char M = 'M';

                //taking in integer for voltage
                while (word[i] != v)  {
                    volt = volt + word[i];
                    i++;
                }
                cout << volt << endl;

在测试用例中,随机插入整个文件中有三个值,即U = 200V,U = 220V和U = 22000mV(m为milli,稍后将用不同的函数处理)。经过测试,我收到了输出:

200
200
20000m

第一个输出是正确的。在第二种和第三种情况下,它似乎首先放松了数字,而在第三种情况下,它最后又增加了一个零。我原先认为它只是丢弃了第一个值,我更改了代码行

volt = volt + word[i];

volt = volt + word[i-1];

看看它在最初读入的值之前读取的值。在这种情况下,如果它正常工作,它会按照我的预期做,输出格式为:

=200
=200
=20000m

我的代码逻辑中是否存在缺陷,我在这里忽略了?

编辑:在尝试进一步调试时,我将最终打印行从while循环外部移动到其中,以查看循环逐步输出的内容。它似乎从2开始并继续在每次迭代结束时添加0直到以200000m

结束

2 个答案:

答案 0 :(得分:1)

似乎问题必须在每次迭代后i和伏特的值不重置。为了解决这个问题,我添加了代码行:

You can also load helper,library and model in --construct() function only one time

<?php
class Register extends CI_Controller {
    public function __construct() {
        parent::__construct();
        $this->load->helper('url');
        $this->load->library('form_validation');
        $this->load->model('registration');
    }

    public function index()
    {


        $this->form_validation->set_rules('username', 'Username','trim|required|min_length[5]|max_length[12]');
        $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[8]',
            array('required' => 'You must provide a %s.')
            );
        $this->form_validation->set_rules('passconf', 'Password Confirmation', 'trim|required|matches[password]');
        $this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email');

        if ($this->form_validation->run() == FALSE) {
            $this->load->view('header');
            $this->load->view('user/register');
            $this->load->view('home');
            $this->load->view('footer');
        }else {

            $data = $this->input->post();

            $allowed = array('username','email','password');

            $data = array_intersect_key($data,array_flip($allowed));

            //$data['password'] = do_hash($data['password']); ...

            $this->registration->form_insert($data);

            // set sessions and login data ... 

            redirect('dashboard/lfg');
        }
    }

(在这种情况下我设置为2以忽略原始V和=解析时)然后再次运行程序,打印出要测试的值,现在输出正确的值。因此,更新的整个代码块现在看起来像:

volt = "";
i = 2;

答案 1 :(得分:0)

您的代码中包含哪些内容? 这个字符串:“volt = volt + word [i];” - 只需要2个计数的数字“2”的ASCII码(这是50)和1个计数的数字“0”(这是48)。然后我取结果:50 + 50 + 48 = 148。 我修改了这段代码。这里是!但是使用了AnsiString和StrToInt函数。

int volt=0, i=2;
char word[20] = "U=220V\0";
AnsiString String;

if(word[0] == 'U'){

    //declaring variables for checking for certain letters
    char v = 'V';
    char m = 'm';
    char M = 'M';

    while(word[i] != v){
        //volt = volt + word[i];
        String += word[i];
        i++;
        }
    //cout << volt << endl;
    volt = StrToInt(String);
    }