0

代码

我创建了以下程序:

#include <iostream>

void f(char v[])
{
    for(char* p = v; *p != 0; p++)
    {
        std::cout << *p << std::endl;
    }
}

int main()
{
    std::cout << int(' ') << std::endl;
    char c[256];
    std::cin >> c;
    f(c);
    return 0;
}

编译器

我在 Code::Blocks 中使用 GNU GCC Compiler 编译,并带有 -std=c++0x 标志(没有警告)。

问题

我遇到的问题是,如果我输入一个包含一个或多个空格的字符串(即“一个和两个”),那么只会打印第一个空格之前的字母(即“o”、“n”、“e”)。

我试过的

唯一想到的就是做一个快速的现实检查。我添加了这一行:

std::cout << "Val: " << int(' ') << std::endl;

并且,正如预期的那样,打印的值不是0(因为很明显,它不是空的 '\0' 字符)......

我不确定我错过了什么。是否是这样的行:

std::cin >> c;

使用''作为某种终止字符?

谢谢。

4

3 回答 3

2
std::cin >> c;

只会读取一个由空格分隔的单词。这是所有>>运营商的功能。

如果您想阅读整行,请改用该getline函数。

于 2013-01-21T10:40:45.240 回答
2

流运算符>>格式化的 input,它使用空格作为字段分隔符。如果要在输入中保留空格,请使用std::getline()或流成员函数read()

于 2013-01-21T10:41:16.363 回答
1

尝试getline输入您的句子,空格用作输入之间的分隔符 by cin>>

于 2013-01-21T10:41:04.597 回答