将文本重新输入字符串

时间:2015-09-03 15:21:41

标签: c++ string goto

这是我基于文字的聊天应用的源代码。

#include <iostream>
#include<iomanip>
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
#include<time.h>
#include<ctype.h>
using namespace std;


int main()
{
    time_t mytime;
    mytime = time(NULL);
    char ques[100],ch;
    cout<<setw(75)<<"Welcome To Talk Back\n\n";
    start:
    cout<<"So, What do you have in mind ? ";
    gets(ques);
                for(int i=0;ques[i]!=0;i++) //Convert string to uppercase
                    ques[i]=toupper(ques[i]);

    //puts(ques);
    for (int i =0;ques[i]!=0;i++)
    {
        if((ques[i]=='T')&&(ques[i+1]=='I')&&(ques[i+2]=='M')&&(ques[i+3]=='E'))
            cout<<"\n\nThe Time and Date as of now is  : "<<ctime(&mytime);
    }

    puts(ques);
    cout<<"Anything Else ? Y/N ";
    cin>>ch;
    if(ch=='Y'||ch=='y')
        goto start;
    else
        exit(0);
    return 0;
}

问题: 当我尝试通过使用goto语句重新启动代码向用户提出新问题时,会发生以下情况:http://prntscr.com/8c5yif

我无法输入新问题。 我该怎么办 ?

由于

2 个答案:

答案 0 :(得分:0)

std::cinstd::cin::clear正在使用。

Live demo

#include <iostream>
#include <algorithm>
#include<iomanip>
#include<stdlib.h>
#include<string.h>
#include <string>
#include<stdio.h>
#include<time.h>
#include<ctype.h>
using namespace std;

int main()
{
    time_t mytime;
    mytime = time(NULL);
    std::string ques, answer;

    cout << setw(75) << "Welcome To Talk Back\n\n";

    do
    {
        cout << "So, What do you have in mind ? ";
        std::getline (std::cin, ques);
        std::cin.clear();

        //Convert string to uppercase
        for (auto& character : ques)
        {
            character = toupper(character);
        }

        if (ques.find("TIME") != std::string::npos)
        {
            cout<<"\n\nThe Time and Date as of now is  : "<< ctime(&mytime);
        }

        std::cout << ques << std::endl;

        cout<<"Anything Else ? Y/N " << std::endl;
        std::getline (std::cin, answer);
        std::cin.clear();
        std::cout << "Reply: " << answer << std::endl;
    }
    while ("Y" == answer || "y" == answer);

    return 0;
}

答案 1 :(得分:0)

cin>>ch;

之后使用flush

喜欢这个:

cin >> ch;
fflush(stdin);

我建议你阅读(包括里面的链接): How to clear the input buffer