当我输入“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)>'
答案 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;
}
在描述的情况下,您从不从标准输入中输入\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结束时读取内存。