【问题标题】:c++: Parsing and File i/o [closed]c++:解析和文件 i/o [关闭]
【发布时间】:2018-10-05 23:29:09
【问题描述】:

我正在尝试编写一个从 txt 文件 (input.txt) 中提取的代码,如下所示:

1,2,3
Hello
2,3,4
Music
1,3,4
Dodie
3,0,1
Kitty
5,1,0
Cheese

并打印出与上面的数字相加的次数。所以第一个是 1+2+3=6,所以它会打印:Hello,Hello,Hello,Hello,Hello,Hello

目前它只打印出第一个总和,然后停止。 (目前打印总和只是为了澄清)。我觉得我需要另一个循环,但我不确定。

#include <iostream>
#include <string>
#include <fstream>
#include <sstream>


int main() {
    std::ifstream inFile ("input.txt");
    if (inFile.is_open()) {
        std::string str;
        int sum = 2;
        int a, b, c;
        char z;
        while (inFile >> a >> z >> b >> z >> c && z == ',') {
            sum = a + b + c;
            std::cout << sum;
        }

        while (inFile >> str) {
            for (int i=0; i<sum; i++) {
                std::cout << str << ",";
            }
            printf("\n");
        }
    } 
    return 0;
}

【问题讨论】:

  • 使用你的调试器一次运行你的程序,看看它做了什么,为什么。这就是调试器的用途。另外,请记住计算机编程的黄金法则:计算机将始终完全按照您的要求执行,而不是您希望它执行的操作。除非您告诉您的计算机读取带有数字的行,然后读取带有文本的行,并且在完成后重复整个过程,否则计算机不会这样做。你告诉你的电脑做什么,上面?首先阅读带有数字的行。然后阅读带有文本的行。而已。这就是您希望您的计算机执行的操作吗?
  • 对上一个问题的改进非常好,劳伦。

标签: c++ file parsing io


【解决方案1】:
while (inFile >> a >> z >> b >> z >> c && z == ','){
                    sum = a + b + c;
                    std::cout << sum;}

这部分代码旨在读取具有您使其读取的结构的行,num,num,num。因此,当它读取第一行时,它会继续下一行并且找不到数字并终止。您也应该添加逻辑以读取下一行,并将数字和单词组合成一个读取,例如

std:string ex=""   
while (inFile >> a >> z >> b >> z >> c >> ex && z == ','){
                    sum = a + b + c;
                    // add the logic for printing here
                    std::cout << sum;} 

并摆脱随后出现的第二个 while 循环。我建议您稍微了解一下这些文件操作,因为您在这里的错误似乎是由于您对它们缺乏了解造成的。希望这会有所帮助!

【讨论】:

  • 没错,我的坏人会编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多