【问题标题】:Do .. While Loop/Textfile/Operation ProblemDo .. While 循环/文本文件/操作问题
【发布时间】:2011-01-26 21:42:27
【问题描述】:

您好,我对以下代码有疑问:

 int skp = 1;
    do{
    file.seekp(skp);
    file>>s;
    cout<<s;
    stats[s]++;
    skp++;
    skp++;
    }while(skp <= 10);

文本文件具有以下内容: 0

1

2

3

0

1

0

1

0

我希望这个程序做的是从读取第二个数字开始,然后跳过一个读取下一个,跳过一个读取下一个等等。它正在做的是读取第二个很好的数字,然后读取再读 2 遍,然后读下一个数字 3 遍,再读下一个数字 3 遍。所以我从上面的文本文件收到的输出是 1112223330.

谁能帮帮我! 谢谢!

【问题讨论】:

    标签: arraylist text-files fseek do-while


    【解决方案1】:

    那是因为您的行由换行符分隔(实际上是 CR 和 LF)。此外,file &gt;&gt; s 将跳过前导空格,因此您最终会得到 ​​p>

     <CR><LF>1 
     <LF>1
     1
    

    所有这些都导致 s 为 1。

    对 2、3 等重复相同的操作。

    忘记你的 seekp() 并简单地使用

    while (file.good()) {
     file >> s; // skip line
     if (!file.good()) break;
     file >> s;
     cout << s;
     stats[s]++;
    } 
    

    【讨论】:

    • 非常感谢!您还解决了一个问题,该问题会在文件结束后出现。
    • 好的 - 您可能还想在第一个 file &gt;&gt; s 之后插入 eof() 测试。此外,代替 file.eof(),测试更通用的 file.good()。 --- 我会更新我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    相关资源
    最近更新 更多