当前位置: 首页 > 知识库问答 >
问题:

在C #中,While循环对字符串中的每个单词重复

步胜
2023-03-14

我正在尝试制作一个神奇的8球,为除“再见”以外的任何输入提供随机预设答案。每次调用 void 函数 magic8ball() 时,它都会生成一个 0 - 19 之间的随机数,并将相应的响应输出到控制台。

int main()
{
    string question;
    cin >> question;
    while (question != "bye") {
        magic8ball(); 
        cout << "~Ask another question.\n";
        cin >> question;
    }
    return 0;
}

由于某种原因,如果问题的输入有多个单词/字符之间有空格,则在再次请求输入之前,循环将重复每个单词。我卡了一个“咕噜咕噜”

>hi frend
 ... Ask again later
hi
~Ask another question.
 ... Don't count on it
frend
~Ask another question.

如何防止while循环将字符串视为一系列单词?为什么cin没有和magic8ball()和cout一起触发?

共有1个答案

索瀚海
2023-03-14

标准::cin 在看到空格时停止读取。空格也算作空格。

如果您希望字符串有空格,请使用标准::获取线()

int main()
{
    string question;
    std::getline(std::cin, question);
    while (question != "bye") {
        magic8ball(); 
        cout << "~Ask another question.\n";
        std::getline(std::cin, question);
    }
    return 0;
}
 类似资料:
  • 问题内容: 我的代码中有一个小问题。我正在尝试反转单词和字符串的字符。例如,“狗跑了”将变成“ ehT神纳尔” 该代码几乎可以正常工作。它只是不添加空格。你会怎么做? 问题答案: 您走在正确的轨道上。主要问题是一个空字符串,而不是一个空格(即使您解决了这个问题,您可能也不想在最后一个单词之后留一个空格)。 这是您可以更简洁地执行此操作的方法:

  • 我必须定义一个包含大写方法的Translator类。该方法将收到一个StringBuffer,它只包含英文字母和空格,并将更改它,以便每个单词都以大写字母开头。 //我需要定义的类

  • 问题内容: 我似乎无法在此方法中找到for循环所需的语法。我想遍历字符串中的单词。 编辑:要注意的一件事是cardArray是ArrayList。 问题答案: 你可以用 在每个空格字符(U + 0020) 上分割。 或者: 这会分割每个空格字符序列(包括制表符,换行符等)。

  • 我刚开始学习Java,我遇到了这个问题:我有一个无限的 while 循环,它创建了一个通过套接字发送的消息;目前,在从队列中轮询许多元素并读取它们之前,不会发送消息。 我的目标是在N秒后发送消息,而不是等待到达MAX_MSG_TO_SEND…有可能做到吗?还是我将继续这种方法?

  • 问题内容: 我被困在我应该声明一个称为“ phrase”的字符串变量的部分,该变量不应一直循环播放。 让您知道我的任务是:与选项1相似,不同之处在于用户在输入第一队的结果后输入“ N”(而不是“ Q”)。然后,程序输入第二个团队名称及其结果,直到输入“ Q”。输出两个语句,例如选项1中的语句,然后输出第三条语句,该语句说明哪个团队处于第一位(基于点数) 输入样例: 样本输出: 更新 : 我的代码:

  • 问题内容: 我正在尝试使程序执行以下操作: 假设我们有一个被设置为的被叫。我想输出给用户,每个单词的第一个字符。我尝试使用该方法,但是没有成功。 我的代码: 我试图检测是否有空格,那么我可以简单地获取下一个索引。谁能告诉我我在做什么错? 问题答案: 尝试按(空格)分割,然后获取每个单词的(第一个字符)并按如下方式打印: