【发布时间】:2017-01-18 04:40:56
【问题描述】:
对于我正在进行的项目,我正在尝试从文本文件中读取整数。在这种情况下,它们被格式化为变量,例如 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 是毫,稍后将使用不同的函数处理)。测试时,我收到输出:
200
200
20000m
第一个输出是正确的。在第二种和第三种情况下,它似乎首先松开了数字,而在第三种情况下,它最后又添加了一个零。本来以为只是丢掉第一个值,我改了这行代码
volt = volt + word[i];
到
volt = volt + word[i-1];
在最初读入的值之前查看它会读入的值。在这种情况下,如果它正常工作,它会执行我期望它执行的操作,输出格式为:
=200
=200
=20000m
我在这里忽略的代码逻辑中是否存在缺陷?
编辑:在尝试进一步调试时,我将最后的打印行从 while 循环外部移动到内部,以查看循环逐步输出的内容。它似乎以 2 开始,并在每次迭代的末尾继续添加 0,直到以 200000m 结束
【问题讨论】:
-
std::getline 有一个重载,这将使 = 上的拆分变得简单。将 = 之后的文本弹出到字符串流中并读取一个整数。读取将在第一个非整数字符处停止,例如 V。然后读那个字符。
标签: c++ parsing text input file-io