Cout不在显示器上打印(控制台)

时间:2013-10-31 20:40:41

标签: c++ cout

所以我有一个代码应该在某个.txt文件中找到一串字符,如果输入在文件中,它说“我发现它”,但是当它不是时,它应该说“没有找到任何东西“,但它只是跳过那一步并结束。 我是初学者,对任何明显的错误都很抱歉。

#include <stdio.h>
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>


using namespace std;

int main(void)
{
setlocale(LC_ALL, "");
string hledat;
int offset;
string line;

ifstream Myfile;
cout.flush();
cout << "Welcome, insert the string to find in the file. \n \n \n" << endl;
cin.get();
cout.flush();
Myfile.open("db.txt");


cin >> hledat;

if (Myfile.is_open())
{
    while (!Myfile.eof())
    {
        getline(Myfile, line);
        if ((offset = line.find(hledat, 0)) != string::npos)
        {
            cout.flush();
            cout << "Found it ! your input was  :   " << hledat << endl;
        }


    }
    Myfile.close();

}



else
{
    cout.flush();
    cout << "Sorry, couldnt find anything. Your input was   " << hledat << endl;
}

getchar();
system("PAUSE");
return 0;

}

2 个答案:

答案 0 :(得分:0)

有三种可能的情况。

  1. 文件未成功打开。
  2. 文件已成功打开,但未找到该字符串。
  3. 文件已成功打开,找到了字符串。
  4. 您有案例1和3的打印输出,但不是2。

    顺便说一下,你的循环条件是错误的。使用getline调用的结果,getline是读取尝试后的ostream对象。

    while (getline(MyFile, line))
    {
        ...
    }
    

    循环将在读取尝试失败时终止,这将在您读取最后一行后发生。您拥有它的方式,您将尝试在最后一行之后阅读,这将是不成功的,但您仍将尝试处理该不存在的行,因为在循环重新开始之前您不会检查eof。

答案 1 :(得分:0)

只需注释//cin.get();,您就不需要它。

输出:

Welcome, insert the string to find in the file.



apple
Found it ! your input was  :   apple

除此之外,它就像一个魅力。

更正后的代码:

#include <stdio.h>

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


using namespace std;

int main(void)
{
    setlocale(LC_ALL, "");
    string hledat;
    int offset;
    string line;

    ifstream Myfile;
    cout.flush();
    cout << "Welcome, insert the string to find in the file. \n \n \n" << endl;
    //cin.get();   <-----  corrected code
    cout.flush();
    Myfile.open("db.txt");


    cin >> hledat;

    if (Myfile.is_open())
    {
        while (!Myfile.eof())
        {
            getline(Myfile, line);
            if ((offset = line.find(hledat, 0)) != string::npos)
            {
                cout.flush();
                cout << "Found it ! your input was  :   " << hledat << endl;
            }


        }
        Myfile.close();

    }



    else
    {
        cout.flush();
        cout << "Sorry, couldnt find anything. Your input was   " << hledat << endl;
    }

    getchar();
    system("PAUSE");
    return 0;

}