从文本文件中读取整数

Reading in integers from a text file

本文关键字:读取 整数 文件 文本      更新时间:2023-10-16

对于我正在处理的项目,我正在尝试从文本文件中读取整数。在这种情况下,它们被格式化为变量,例如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=22000V(m是milli,稍后将使用不同的函数处理)。测试时,我收到输出:

200
200
20000m

第一个输出正确。在第二种和第三种情况下,它似乎一开始就把数字弄松了,而在第三种情形下,它在最后又加了一个零。我最初以为它只是丢弃了第一个值,我更改了的代码行

volt = volt + word[i];

volt = volt + word[i-1];

看看它在最初读取值之前会读取什么值。在这种情况下,如果它工作正常,它会做我希望它做的事情,输出格式为:

=200
=200
=20000m

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

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

问题似乎与i和volt的值在每次迭代后没有重置有关。为了解决这个问题,我添加了代码行:

volt = "";
i = 2;

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

while (myfile >> word) {
volt = "";
i = 2;
//printing out words (remove)
cout << word << endl;
//checking for U in words
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;
}
cout << volt << endl;

您的代码中有什么?这个字符串:"volt=volt+word[i];"-只取2个计数的ASCII代码,数字为"2"(这是50)和1个计数的数字为"0"(这就是48)。然后我得出结果:50+50+48=148。我修改了这个代码。给你!但也使用了AnsiString和StrToInt函数。

int volt=0, i=2;
char word[20] = "U=220V";
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);
}