为什么程序不能立即输出?

时间:2015-11-22 06:35:16

标签: c++

当我输入“111 111”然后按回车键时,输出显示任何内容。然后当我按两次输入时,出现预期输出。那是为什么?

/usr/local/rvm/gems/ruby-2.2.1/gems/railties-4.2.4/lib/rails/commands/server.rb:7:in `<module:Rails>': superclass mismatch for class Server (TypeError)
        from /usr/local/rvm/gems/ruby-2.2.1/gems/railties-4.2.4/lib/rails/commands/server.rb:6:in `<top (required)>'

4 个答案:

答案 0 :(得分:3)

您可以使用标题文件string,这样可以提供更多灵活性,如下所示:

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string seq;
    //initialize the sequence

    //read characters from the keyboard
    getline(cin,seq);

    //the output should be the sequence of characters
    //users typed before
    cout << seq;
    system("pause");
    return 0;
}

回应OP的问题更新:

在描述的情况下,您从不从标准输入中输入\0,对吧?而是按Enter键。

if (seq[i] == '\0'){

相反,您可以将此检查行替换为:

if (seq[i] == '\n'){

答案 1 :(得分:2)

您可以为std::getline()提供一个额外的char参数,用于定义行分隔符。在您的情况下,只需将其读取到下一个'\0'

auto seq = std::string{};
std::getline(cin, seq, '\0');
顺便说一句:你真的很确定,你想读到下一个'\0'吗?使用键盘输入零字符并不容易。如果您确实对输入中的完整行感兴趣,只需删除分隔符参数:std::getline(cin, seq)

答案 2 :(得分:0)

此代码:

for (int i = 0; i<10; i++){
    seq[i] = ' ';
}

将seq中的所有元素初始化为空格,而不是'\ 0'。我不认为你的break语句会触发。

答案 3 :(得分:0)

您的程序在执行任何其他操作之前会读取10个字符。所以你需要提供10个字符。

中断检查永远不会触发。为什么会这样。

最后,cout&lt;&lt; seq不安全,因为它可能会在seq结束时读取内存。