【问题标题】:Infinite loop while using pointers使用指针时的无限循环
【发布时间】:2013-06-26 03:16:00
【问题描述】:

尝试在 C++ 中执行指针循环时遇到问题。我想要做的是,用户可以继续输入消息,并且新行上的消息将被附加。只有在“.”时才会停止提示。在新行的开头检测到。这是我的主要方法:

vector <Message*> message_list;
Message* message1 = new Message("Student1", "Student2");
cout << "Enter message text line, enter . on new line to finish: " << endl;
while(getline(cin, message1->get_text_input()))
{
    if(message1->get_text_input() == ("."))
    {
        break;
    }
    else
    {
        message1->append(message1->get_text_input());
    }
}
 }

这是我的 .cpp 文件:

Message::Message(string recipient, string sender)
{
this->recipient = recipient;
this->sender = sender;  
}

string Message::get_text_input()
{
return text_input;
}

void Message::append(string text)
{
message += text + "\n";
}

string Message::to_string() const
{
return ("From: " + sender + "\n" + "To: " + recipient + "\n");
}

void Message::print() const
{
cout << message;
}

我的头文件类:

class Message
{
public:
Message(std::string recipient, std::string sender);
std::string get_text_input();
void append(std::string text);
std::string to_string() const;
void print() const;
private:
std::string recipient;
std::string sender;
std::string message;
std::string text_input;
char* timestamp;
};

有人知道为什么会这样吗?甚至 ”。'被检测到,它仍然不会停止。

提前致谢。

【问题讨论】:

  • getline(cin, message1-&gt;get_text_input()) 编译?它不应该。
  • 请不要以多个名字发帖stackoverflow.com/questions/17362152/…
  • 但是我应该怎么写getline(cin, text_input)?因为如果我这样做,我会遇到错误消息。我会更新我的头文件
  • 您好,有人可以帮忙吗?这表明我没有错误,我什至不知道如何用谷歌搜索答案。

标签: c++ pointers while-loop


【解决方案1】:

getline(cin, message1-&gt;get_text_input()) 中,您将获得按值返回的字段 text_input。所以现在你有了一个全新的字符串,你可以在其中填充消息,但它会立即被销毁,因为它永远不会得到名字。 要解决您的问题,请让 get_text_input 返回参考:

string& Message::get_text_input()
{
return text_input;
}

这样,输入字符串会将行转换为原始字符串。 另外,去查找 References 和 Values,你会非常需要它们。

【讨论】:

  • 好的,非常感谢。它是固定的。与上述评论中的某些人不同,他们只知道如何发现重复线程但没有帮助。谢谢弗朗克
猜你喜欢
  • 1970-01-01
  • 2016-08-12
  • 1970-01-01
  • 1970-01-01
  • 2020-01-31
  • 1970-01-01
  • 2013-04-12
  • 2021-05-21
  • 2018-02-03
相关资源
最近更新 更多