对于我正在处理的项目,我试图从文本文件中读取整数。在这种情况下,它们被格式化为变量,例如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
结束答案 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);
}