为什么我的输入在这个C ++程序中如此混乱?

时间:2020-04-23 01:41:53

标签: c++ input cin

我正在尝试为Linux创建一个命令行邮件应用程序(尽管我在Xcode上进行开发会导致VM为我的计算机使用很多功能)。我在主菜单中有两个选项(用户输入要选择的数字)。我在每次输入后都使用它,无论是简单的can还是get line(can,stringName):

p <- ggplot(df, mapping = aes(x, Points, colour = Event, text = paste("Person: ", Person,
                                                                      "\nEvent: ", Event))) +
  theme(legend.position='none')+
  geom_point(shape = 4)
ggplotly(p) %>%
  layout(hovermode = "x", hoverdistance = 1)

这就是为什么我对自己的输入感到各种各样奇怪的行为感到困惑。这是我的代码和示例输出(end函数只是一个需要花费<< endl;的for循环):

代码

void clearCin() {
    cin.clear();
    cin.ignore(INT_MAX, '\n');
}

输出

bool stdEmail() {

    string to, cc, bcc, subject, message;

    cout << "When entering email addresses, seperate multiple email addresses with a space";
    endl(2);

    cout << "To: ";
    getline(cin, to);
    clearCin();

    cout << "cc: ";
    getline(cin, cc);
    clearCin();

    cout << "bcc: ";
    getline(cin, bcc);
    clearCin();
    endl(1);

    cout << "Subject: ";
    getline(cin, subject);
    clearCin();
    endl(1);

    cout << "Now enter your message, when you're finished, type a period on a new line";
    endl(2);

    ofstream file;
    file.open("newMessage.txt", fstream::trunc);

    bool repeat = true;

    while (repeat) {
        getline(cin, message);
        clearCin();
        if (message == ".") {
            repeat = false;
        } else {
            file << message << endl;
        }
    }

    file.close();
    return true;
}

这是newMessage.txt中显示的内容:

这是示例消息

1 个答案:

答案 0 :(得分:0)

cin.ignore(INT_MAX, '\n');丢弃换行符,并且getline在读取换行符时完成,因此您必须在输入消息后将两次按Enter键以使getline读取它,并且必须在输入“'”后按Enter键两次。结束循环。

相关问题