c ++链表仅输出所有其他元素

时间:2016-12-01 18:23:08

标签: c++ linked-list

我正在尝试创建一个充满字符的链表。以下代码仅保存每个其他元素,我可以修改哪些来解决此问题?附件是用于读取用户输入的两个函数。

void LList :: InsertTail(element thing) {
        // PRE : the N.O. LList is valid
        // POST : the N.O. LList is unchanged, except that a
        //      new listnode containing element thing has been
        //      inserted at the tail end of the list

        listnode * temp;

        temp = new listnode;

        temp -> data = thing;
        temp -> next = NULL;
        if(head == NULL)
                head = temp;
        else
                tail -> next = temp;
        tail = temp;
}






void LList :: ReadForward() {
        // PRE: the N.O. LList is valid
        // POST : the N.O. LList is valid, all of its
        //      previous listnodes have been deleted, and
        //      it now consists of new listnodes containing
        //      elements given by the user in foward order
        char userval;
        Clean();
        cout <<  "Enter the message: ";
        userval = cin.get();
        cout << userval;
        while (cin.get()!= SENTINEL) {
                InsertTail(userval);
                userval = cin.get();
                cout << userval;
        }
        cin.clear();
        cin.ignore(80, '\n');

}

2 个答案:

答案 0 :(得分:1)

问题是你在ReadForward中的whileloop。

每次调用cin.get()时,您正在读取另一个角色 - 因此不会添加该角色。

将其更改为:

while(userval) {

答案 1 :(得分:0)

问题出在while()方法中的ReadForward()循环中:

while (cin.get() != SENTINEL) { <----
  InsertTail(userval);
  userval = cin.get();
  cout << userval;
}

在标记的行上,您调用cin.get()但从不将其存储在任何位置。这会丢弃所有其他字符,因为你只是在之后存储了一个字符,而你已经阅读了另一个字符。

修复是每次循环运行时将get()的结果存储在userval内。

cout <<  "Enter the message: ";
while (cin >> userval) {
  cout << userval;
  InsertTail(userval);
}