【问题标题】:Reading in integers from a text file从文本文件中读取整数
【发布时间】: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


【解决方案1】:

似乎问题与 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;

【讨论】:

    【解决方案2】:

    您的代码中有什么? 这个字符串:"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);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-21
      • 1970-01-01
      • 2012-01-09
      • 2011-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多