C ++ C Loop Issue - PullRequest
       38

C ++ C Loop Issue

0 голосов
/ 18 января 2012

У меня проблема с C / C ++.Ниже на самом деле мои коды.После того, как в меню выбрана опция 1. Она запускается и отображает результаты в обычном режиме, а также повторно отображает меню в обязательном порядке.Однако я не смогу ничего потом напечатать.Почему это так?Заранее спасибо тем, кто помогает, ура!

РЕДАКТИРОВАТЬ, ЭТО МОЯ ГЛАВНАЯ

int main()
{
int Option;
Menu m;
do
{
    m.showMenu();
    cout<<"Please enter your choice:";
    cin>>Option;



    if (Option == 1)
    {

        int scenario = 0;
        string Lines;
        Mobile mobileObj;

        freopen("file.txt","r",stdin);


        while(true)
        {
            getline(cin,Lines);
            while(Lines.length() > 1 && Lines[0] == ' ') Lines = Lines.substr(1);
            if(Lines.length() == 1 && Lines[0] == ' ') continue;

            if(scenario == 0)
            {
                if(Lines == "Mobile Phones & Accessories Classifieds")
                {
                    scenario = 1;
                    getline(cin,Lines);
                    continue;
                }
            }

            else if(scenario == 1)
            {
                if(Lines[0] == '*') continue;
                else scenario = 2;
            }

            else if(scenario == 2)
            {
                if(Lines[0] == '[')
                {
                    for(unsigned int i=0;i<Lines.length();++i)
                    {
                        if(Lines[i] == ']')
                        {
                            mobileObj.mobDevName = Lines.substr(i+1);
                            break;
                        }
                    }
                }

                else if(Lines.length() > 11 && is_number(Lines[0]) && is_number(Lines[1]) && is_number(Lines[10]))
                {
                    mobileObj.dateOfPub = Lines.substr(0,11);
                }

                else if(Lines.length() >= 5 && Lines[0] == 'S' && Lines[1] == '$')
                {
                    mobileObj.price = Lines;
                    v_Mob.push_back(mobileObj);
                }

                else if(Lines == "Browse Marketplace Listings") break;
            }

       }


    cout<<("[Mobile device Name] – [Date of publish] – [Mobile phones’ pricings]\n");

    for(unsigned int i=0;i<v_Mob.size();++i)
    {
        cout << i+1 << ") ";
        v_Mob[i].print();
    }

    cout<<"\n";
    cout<<"Going back to main menu ...\n";
    cout<<"\n";
}

else if (Option == 2)
    {
        cout<<"hi\n";
    }

}while(Option != 0);

return 0;
}

1 Ответ

1 голос
/ 18 января 2012

После первого цикла stdin теперь файл "file.txt" из-за:

freopen("file.txt","r",stdin);

То есть вы ничего не можете ввести из командной строки.

Если вам нужно прочитать из "file.txt", используйте ifstream:

std::ifstream in("file.txt");
if (in.is_open())
{
    while (std::getline(in, Lines))
    {
        // ...
    }
    in.close();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...