我正在尝试创建一个充满字符的链表。以下代码仅保存每个其他元素,我可以修改哪些来解决此问题?附件是用于读取用户输入的两个函数。
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');
}
答案 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);
}