阅读.dat文件和cout' ing?

时间:2014-04-08 20:38:58

标签: c++ visual-studio-2010

我有一个硬件分配,我必须基本上读取.dat文件并执行以下操作:

  1. 计算文件中的字符数。
  2. 计算文件中的单词数。
  3. 计算文件中的句子数。
  4. 计算文件中的行数。
  5. 找到包含最多字符的行。
  6. 我相信我已经有了正确的代码(编译时没有错误)。问题是,当我编译并运行时,Visual Studio会打开并立即关闭窗口。它没有打印出我告诉它的部分。我不知道它是不是在读取.dat文件,还是我把cout放在了错误的位置! 我不必在.dat文件中打印出什么。我只需要打印出上面的5个步骤。 有人可以帮我解决这个问题吗?

    #include "stdafx.h"
    #include <fstream>
    #include <iostream>
    using namespace std;
    
    void main()
    {
    ifstream input ("LAB4.DAT");
    
    long c;
    long characters = 0;
    long words = 0;
    long counter = 0;
    long sentences =0;
    long newlines = 0;
    long havealpha;
    
    while ((c=input.get()) != EOF)
    {
    
        ++characters;
        if(isalpha(c))
            havealpha=true;
        if (isspace(c) && havealpha)
        {
            ++words;
            havealpha=false;
        }
    
        if (c=='.')
            counter = 2;
        if (c==' ')
            --counter;
        if (c=='\n')
            counter = 0;
        if (counter <= 0)
        {
            ++sentences;
            counter = 0;
        }
    
        if (c=='\n') 
            ++newlines;
    
        long total = 0;
        long line = 0;
        long totaltemp = 0;
        long linetemp = 0;
        while (c!='\n')
        {
            ++total;
            ++line;
            if (total > totaltemp)
            {
                totaltemp = total;
                linetemp = line;
            }
            if (c=='\n')
            {
                total = 0;
                line = 0;
            }
        }
            cout<<characters<<"Characters"<<words<<"Words"<<sentences<<"Sentences"                        <<newlines<<"New Lines"<<"The longest line is"<<linetemp<<"with"<<totaltemp<<"characters"   <<endl;
    
    }
    
    
    
    
    }
    

1 个答案:

答案 0 :(得分:1)

1.对于刚关闭窗口的情况,使用Ctrl + F5而不是F5启动项目。 阅读:How to keep the console window open in Visual C++?

此外,您可以在退出main之前使用cin.get();来避免这种情况。

  1. 其次,while (c!='\n')将进入无限循环,因为c的值永远不会在块内发生变化。 因为你所有的逻辑落入一个地方, while(c!='\n')应该低于while ((c=input.get()) != EOF){。这样你就可以一次专注于一行。

  2. 保留characters变量以计算整个字符长度,创建一个新变量来计算该特定行中的字符。

  3. 休息就是清理。