【问题标题】:How to use string with phrases that contain spaces [closed]如何将字符串与包含空格的短语一起使用 [关闭]
【发布时间】:2023-03-10 12:41:01
【问题描述】:

我在 cin.ignore() 之后使用了 cin.getline,但我收到一条错误消息,说 unassigned int... 不知道该怎么做或出了什么问题。有什么建议吗?

这是我的代码:

 #include <iostream>
 #include <string>
 #include <cstring>

 using namespace std;


 int main()
 {
     string phras;
     cout << " Provide a phrase, up to 30 characters with spaces > " << endl;
     cin.ignore();
     cin.getline(phras, sizeof(phras));
     cout << " The phrase is: " << phras << endl;
     cout << endl;


     return 0;
 }

更新 我改变了 cin.getline(phras, sizeof(phras)); 到 getline(cin,phras) 问题解决了!感谢大家的帮助!

【问题讨论】:

  • 你为什么把代码放在你不想让我们评论的问题中?如果不相关,请忽略它。
  • &gt;&gt; 捕获单个字符的操作将在 cin 缓冲区中留下一个换行符。您可以使用cin.ignore() 将其删除。
  • @paulRooney 所以我应该在 cin >> 字母之前还是之后写?很抱歉澄清问题。我只是想确保我做对了!顺便谢谢你。
  • cin &gt;&gt; letter; 之后但在cin.getline(word, sizeof(word)); 之前。如果您在该点输入多个字符,它仍然会搞砸。
  • 如果有人看这里作为参考,这行得通^^^。添加 cin.ignore()

标签: c++ string c-strings


【解决方案1】:

问题是

char letter[1];

不够大。如果 C 字符串最多可容纳 N 字符,则需要将其声明为 char letter[N+1] 以便为空终止符留出空间。因此,如果用户要输入单个字符,则需要:

char letter[2];

因此,当cin &gt;&gt; letter 将 2 个字符写入只有 1 个空间的数组时,您会遇到未定义的行为。

同样,如果允许用户输入 10 个字母的单词,则应该是:

char word[11];

它应该是:

char phrase[31];

【讨论】:

  • 第一个应该只包含一个字母...如果您在此之前阅读了声明,它说输入一个字符..
  • @KatieStevers 编译器仍将 char letter[1]; 视为数组类型。也许你打算char letter;
  • @KatieStevers 因为它是一个 C 字符串,你仍然需要 2 个元素来保存 1 个字母。一个用于字母,一个用于空终止符。
  • Bammar,'0' 是你开始计数的地方,而不是 '1'。所以不,1是正确的。我刚刚在“>>>>从控制结构到对象的 C++ 开始”一书中读到了这篇文章。
  • 但是,您确实为空终止符 '\0' 或其他任何内容添加了一个额外的空间。所以它最终会影响事情。
猜你喜欢
  • 1970-01-01
  • 2013-04-13
  • 2011-03-12
  • 2018-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-04
  • 1970-01-01
相关资源
最近更新 更多