我有一个硬件分配,我必须基本上读取.dat文件并执行以下操作:
我相信我已经有了正确的代码(编译时没有错误)。问题是,当我编译并运行时,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;
}
}
答案 0 :(得分:1)
1.对于刚关闭窗口的情况,使用Ctrl + F5而不是F5启动项目。 阅读:How to keep the console window open in Visual C++?
此外,您可以在退出main之前使用cin.get();
来避免这种情况。
其次,while (c!='\n')
将进入无限循环,因为c的值永远不会在块内发生变化。
因为你所有的逻辑落入一个地方,
while(c!='\n')
应该低于while ((c=input.get()) != EOF){
。这样你就可以一次专注于一行。
保留characters
变量以计算整个字符长度,创建一个新变量来计算该特定行中的字符。
休息就是清理。