如何将字符串与包含空格的短语一起使用 [关闭]
Posted
技术标签:
【中文标题】如何将字符串与包含空格的短语一起使用 [关闭]【英文标题】:How to use string with phrases that contain spaces [closed] 【发布时间】:2017-01-31 22:33:42 【问题描述】:我在 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) 问题解决了!感谢大家的帮助!
【问题讨论】:
你为什么把代码放在你不想让我们评论的问题中?如果不相关,请忽略它。>>
捕获单个字符的操作将在 cin 缓冲区中留下一个换行符。您可以使用cin.ignore()
将其删除。
@paulRooney 所以我应该在 cin >> 字母之前还是之后写?很抱歉澄清问题。我只是想确保我做对了!顺便谢谢你。
在cin >> letter;
之后但在cin.getline(word, sizeof(word));
之前。如果您在该点输入多个字符,它仍然会搞砸。
如果有人看这里作为参考,这行得通^^^。添加 cin.ignore()
【参考方案1】:
问题是
char letter[1];
不够大。如果 C 字符串最多可容纳 N
字符,则需要将其声明为 char letter[N+1]
以便为空终止符留出空间。因此,如果用户要输入单个字符,则需要:
char letter[2];
因此,当cin >> 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' 或其他任何内容添加了一个额外的空间。所以它最终会影响事情。以上是关于如何将字符串与包含空格的短语一起使用 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 scanf 从用户输入中获取字符串( char * ),由双引号分隔并包含空格 [关闭]