C ++中的FILE *没有读取整个文件

时间:2015-05-08 05:01:57

标签: c++

我的文件有一个简单的问题,当我在FILE *中读取然后在删除标点符号后再次将其打印出来时,它只会打印出文件的底部部分。我的输入位于此问题的底部。问题是:有没有理由为什么只打印出文件的一部分?

这是我的文件中的代码:

int currentLetter= 0;
        string word = "";
        FILE * input;

        input = fopen("test.txt", "r");
        if (input == NULL)
        {

            perror("Error opening file");
        }
        else{
            while(currentLetter != EOF){//Loop Through File
                do{// GETWORD
                    currentLetter = fgetc(input);
                    if(currentLetter == '?' || currentLetter == '<'|| currentLetter == '>'|| currentLetter == ':' ||currentLetter == '\"')
                        word += ' ';
                    if (isalpha(currentLetter) || isdigit(currentLetter) || currentLetter == '-' || currentLetter == '\'' )
                    {
                        word += tolower(currentLetter);
                    }

                }while(currentLetter != EOF && currentLetter != ' ' && currentLetter != '\n');

                if (word != " "  && !(word.find_first_of("0123456789") < word.length()))
                {
                    cout<< word << endl;
                    // insert(word); This will called the b

                }
                word = "";
            }
        }

这是我的输入(非常大): 五个难忘文本的集合。

  

&#34;我自己完全相信,如果所有人都尽职尽责,如果没有   被忽视了,如果做出最好的安排,就像它们一样   我们将证明自己再一次能够保卫我们的岛屿   回到家乡,战胜风暴,并超越了威胁   暴力,必要时多年,必要时单独使用。无论如何,那   是我们要尝试做的。这是他的决心   陛下政府 - 他们中的每一个人。这是议会的意愿   和国家。与大英帝国和法兰西共和国有联系   在他们的事业和需要中,他们将一起捍卫死亡   他们原生的土地,像最好的同志一样互相帮助   他们的力量。尽管大片的欧洲和许多古老的和   着名的国家已经下降或可能陷入盖世太保和   纳粹统治的所有可憎的机器,我们不会标记或失败。我们   我们将在法国战斗,我们将继续战斗   在海洋和海洋中,我们将以越来越大的信心与之战斗   在空中不断增强的力量,我们将保卫我们的岛屿,无论如何   费用可能是,我们将在海滩上战斗,我们将战斗   登陆场地,我们将在田野和街道上战斗,我们   要在山上作战;我们永远不会投降,即使是投降   我暂时不相信,这岛或其中很大一部分都是   征服和挨饿,然后我们的帝国超越海洋,武装和   由英国舰队守卫,将继续奋斗,直到,在   上帝的美好时光,新世界,充满力量和力量,步伐   拯救和解放老人。&#34; --Winston   丘吉尔,1940年

     

&#34; Fourscore和七年前我们的父亲提出了这个问题   大陆一个新的国家,在自由中孕育并致力于   所有人都是平等的主张。现在我们正在搞一个   伟大的内战,测试那个国家或任何国家是如此   构思和如此专注可以长期忍受。我们遇到了一个伟大的   战争的战场。我们已经致力于其中的一部分   田野作为那些在这里献出生命的人的最后安息之所   那个国家可能会生活。这完全合适   我们应该这样做。但从更广泛的意义上说,我们不能奉献,我们   不能奉献,我们不能让这个地方神圣化。勇敢的人,活着   在这里挣扎的死者已经把它奉为远远超过我们的穷人   增加或减少的力量。世界将很少注意也不会长久记住   我们在这里说的是什么,但它永远不会忘记他们在这里做了什么。它是   对我们来说,生活宁愿专注于未完成的工作   到目前为止,他们在这里战斗的人如此高尚。它是   而是让我们在这里致力于以前的伟大任务   我们 - 从这些荣幸的死者那里,我们对此更加投入   他们给出了最后一个全力投入的原因 - 我们   在这里高度决心,这些死者不会白白死去   这个在上帝之下的国家将有一个新的自由诞生,那个   人民的政府,人民的政府,不会的   从地球上消失。&#34; - 阿布拉姆林肯

     

我的朋友们,今天我告诉你,尽管有困难和困难   沮丧的那一刻,我还有一个梦想。这是一个深刻的梦想   植根于美国梦。我梦想有一天这个国家   将起来并实现其信条的真正含义:&#34;我们坚持   这些事实是不言而喻的:人人生而平等。&#34;一世   有一天梦想有一天在佐治亚州的红色山丘上的儿子   以前的奴隶和前奴隶主的儿子将能够坐下来   在一个兄弟情谊的桌子上一起来。有一天我有一个梦想   甚至是密西西比州,一个荒漠的国家,与闷热的国家   不公正和压迫的热度,将变成一片绿洲   自由和正义。我有一个梦想,我的四个孩子将在某一天   生活在一个他们不会被他们的颜色评判的国家   皮肤,但由他们的性格的内容。我今天有一个梦想。 ---   马丁路德金

     

威廉·莎士比亚的朱莉丝·凯撒的生与死

     

SCENE II。公共场所。

     

蓬勃发展。输入CAESAR;安东尼,为课程; CALPURNIA,PORTIA,   DECIUS BRUTUS,CICERO,BRUTUS,CASSIUS和CASCA;一大群人   以下,其中包括一个占卜者

     

凯撒让我的男人对我很胖;光滑的男人和男人   比如睡觉o&#39;夜晚:Yond Cassius有着瘦弱和饥饿的样子;他   想太多了:这样的人很危险。

     

安东尼不要害怕他,凯撒;他并不危险;他是一位高贵的罗马人   并且很好。

     凯撒他会更胖吗!但我不担心他:但如果我的名字是   容易害怕,我不知道那个我应该尽快避免的人   备用卡西乌斯。他读的很多;他是一个伟大的观察者,他看起来   通过男人的行为:他不喜欢戏剧,就像你一样,   安东尼;他听不到音乐;他很少微笑,并在这种微笑中微笑   好像他嘲笑自己并蔑视他的精神可以转移到   任何事情都要微笑。这样的人,他永远不会心灵轻松   他们看到比自己更大,因此他们非常   危险的。我宁愿告诉你什么是恐惧,而不是我害怕;   因为我总是凯撒。来吧我的右手,因为这只耳朵是聋子,   并且真实地告诉我你对他的看法。

     

&#34; Monty Python和圣杯&#34;

     

场景25       HEAD KNIGHT:呃!         倪!         倪!         倪!阿瑟:你是谁? HEAD KNIGHT:我们是谁说的骑士......呃!阿瑟:不!不是说倪的骑士!头   骑士:一样!贝德米尔:他们是谁? HEAD KNIGHT:我们是   神圣话语的守护者:倪,笔,和         东东口碑!随机:Nee-wom!阿瑟:那些听到他们的人很少能活着讲述这个故事! HEAD KNIGHT:谁说倪的骑士   要求牺牲! ARTHUR:倪骑士,我们很简单   寻求旅行的旅行者         住在这些树林之外的魔法师。 HEAD KNIGHT:呃!倪!倪!倪! ARTHUR和PARTY:哦,哦! HEAD KNIGHT:我们会的   说&#39; nee&#39;如果你不安抚我们,请再次向你阿瑟:嗯,什么   你想要的吗? HEAD KNIGHT:我们想......一个灌木丛!         [戏剧性的和弦] ARTHUR:什么? HEAD KNIGHT:呃!倪! ARTHUR和PARTY:哦,哦!阿瑟:拜托,拜托!不再!我们   应找到一个灌木丛。 HEAD KNIGHT:你必须带着一个回到这里   灌木丛,否则你会         从来没有活过这块木头!阿瑟:倪骑士,你是公平的,我们会回来的         带着灌木丛。 HEAD KNIGHT:一个看起来不错的人。阿瑟:当然。 HEAD KNIGHT:并不太贵。阿瑟:是的。
  HEAD KNIGHTS:现在......去吧!

     

场景11

     

GALAHAD:Zoot! DINGO:不,我是Zoot的同卵双胞胎妹妹,   巴丁格。 GALAHAD:哦,好吧,对不起,我 - DINGO:你在哪儿   要去哪里?加拉哈德:我寻求圣杯!我已经看到了,在这里   城堡! DINGO:不!不好了!糟糕,糟糕的Zoot!加拉哈德:这是什么?   DINGO:哦,邪恶,坏,顽皮的Zoot!她一直在下车         到我们的灯塔,我记得,它是圣杯状的。它不是         我们第一次遇到这个问题。 GALAHAD:这不是真正的圣杯吗? DINGO:哦,邪恶,坏,顽皮,邪恶的Zoot!哦,她是一个   淘气         那个人,她必须支付罚款 - 而在这里的城堡炭疽病,我们         只有一个惩罚,可以点亮圣杯形状的灯塔。您         必须将她绑在床上并打她!女孩:打屁股!打屁股! DINGO:你必须好好打她。在你拥有之后   打了她,你         可以随心所欲地对待她。然后,打我。各种各样的女孩:打我一惊。         和我。         和我。 DINGO:是的,是的,你必须给我们一个好的打屁股!女孩:打屁股!打屁股!

     

场景35 ARTHUR:它就在那里!死亡之桥!罗宾:哦,   大。骑士:看! ARTHUR:第24幕的老人!   贝德米尔:他在这做什么?阿瑟:他是这个世界的守护者   死亡之桥。他问每个人         旅行者五个问题 - 骑士:三个问题。阿瑟:三个问题。回答五个问题的人 - 骑士:三个   的问题。阿瑟:三个问题可能会安全交叉。 ROBIN:   如果你的问题出错怎么办?阿瑟:那你被投入了   永恒的危险峡谷。罗宾:哦,我不会去。骑士:谁   要回答问题?阿瑟:罗宾爵士!罗宾:对吗?   阿瑟:勇敢的罗宾爵士,你走吧。罗宾:嘿!我很棒   理念。 Launcelot为什么不去? LAUNCELOT:是的,让我走吧,我的   列日。我会单枪带他。         我要向东北做一个假动作 - 阿瑟:不,不,坚持下去,坚持下去,坚持下去!回答这五个问题         问题 - 骑士:三个问题。 ARTHUR:尽可能提出三个问题。我们会看......和         祈祷。 LAUNCELOT:我理解,我的君主。阿瑟:祝你好运,勇敢的朗塞洛特先生。上帝与你同在。保持者:停下来!谁   穿过死亡之桥必须回答我         这些问题三,他看到的另一面。 LAUNCELOT:向我提问,桥梁管理员。我不害怕。保持者:什么   是你的名字? LAUNCELOT:我的名字是Camelot的Launcelot爵士   保持者:你的任务是什么? LAUNCELOT:寻求圣杯   保持者:你最喜欢的颜色是什么? LAUNCELOT:蓝色。 KEEPER:   对。就行了。 LAUNCELOT:哦,谢谢。非常感谢你。   罗宾:这太简单了!保持者:停下来!谁接近桥梁   死亡必须回答我         这些问题三,他看到的另一面。罗宾:向我提问,桥梁管理员。我不害怕。保持者:什么是   你的名字?罗宾:卡米洛特的罗宾爵士。保持者:你的是什么   寻求?罗宾:寻求圣杯。保持者:什么是   亚述的首都?罗宾:我不知道! Auuuuuuuugh!
  保持者:停下来!你叫什么名字?加拉哈德:卡米洛特的加拉哈德爵士。   保持者:你的任务是什么?加拉哈德:我寻求圣杯   保持者:你最喜欢的颜色是什么?加拉哈德:蓝色。没有yel--   Auuuuuuuugh!保持者:嘿嘿。停止!你叫什么名字? ARTHUR:   这是英国国王亚瑟。保持者:你的任务是什么?   阿瑟:寻求圣杯。保持者:什么是空速   空腹的速度?阿瑟:你的意思是什么?一个   非洲或欧洲的燕子?保持者:什么?我不知道!   Auuuuuuuugh!贝德米尔:如何了解燕子? ARTHUR:   好吧,当你成为一个知道的国王时,你必须知道这些事情。

我的输出:

enter image description here

2 个答案:

答案 0 :(得分:5)

问题是文本滚动到命令窗口的上边缘并丢失。右键单击标题栏左上角的图标,打开&#34;属性,&#34;并将窗口/屏幕缓冲区大小增加到大量。然后再试一次。

或者,在命令行运行它并将输出发送到具有>字符的文件。

assignment.exe > completeOutput.txt

答案 1 :(得分:2)

给我Stiles的理由是完全正确的。只是为了尝试我修改你的代码打开并写入另一个文件。它打印了整个文本。

int currentLetter = 0;
string word = "";
FILE * input;
FILE * result ;
int err = 0;
int errres = 0;
errres = fopen_s(&result, "result.txt", "a+");
err  = fopen_s(&input,"test.txt", "r");
if (err != 0)
{

    //perror("Error opening file");
    cout << "error" << endl;
}
else{
    while (currentLetter != EOF){//Loop Through File
        do{// GETWORD
            currentLetter = fgetc(input);
            if (currentLetter == '?' || currentLetter == '<' || currentLetter == '>' || currentLetter == ':' || currentLetter == '\"')
                word += ' ';
            if (isalpha(currentLetter) || isdigit(currentLetter) || currentLetter == '-' || currentLetter == '\'')
            {
                word += tolower(currentLetter);
            }

        } while (currentLetter != EOF && currentLetter != ' ' && currentLetter != '\n');

        if (word != " "  && !(word.find_first_of("0123456789") < word.length()))
        {
            //cout << word << endl;
            // insert(word); This will called the b


            if (errres == 0)
            {
                fputs(word.c_str(), result);
                //fprintf(result, "%s", word);
            }

        }
        word = "";
    }
    fclose(result);
}

}

注意: - 结果没有格式化,我编写的代码只是为了显示。