输入带有两个完整停止的字符串

时间:2018-04-29 10:16:35

标签: c++ string input getline

我需要输入一个带有两个fullstop的字符串,但是这段代码输入了最后一个fullstop。 当输入是:“思想就是一切。你认为自己变成什么样。”接下来是回车键和“坐下”

程序存储:“心灵就是一切。你认为自己变成了什么”,tem,它错过了最后一个完整停止,而不是最后一个存储在pas中:

#include <iostream>
#include <string>
#include <stdlib.h> 
using namespace std;
int main(){
  char tem[50];
  String pas=""

  cin.get(tem,50);
  cin>>pas;
  cout<<tem<<endl;
}

2 个答案:

答案 0 :(得分:1)

您分配的缓冲区大小为50个字符长,您输入的字符串也是50个字符长,但cin.get需要1个字符来终止0,因此它会占用您的句点。使缓冲区51长并读取51个字符。

#include <iostream>

int main()
{
    char tem[51];
    std::cin.get(tem, 51);
    std::cout << tem << std::endl;
}

如果您使用std::string代替,则无需担心输入不适合您的缓冲区:

#include <iostream>
#include <string>

int main()
{
    std::string tem;
    std::getline(std::cin, tem);
    std::cout << tem << std::endl;
}

答案 1 :(得分:-1)

这个字符串的长度&#34;心灵就是一切。你认为你成为了什么。&#34;是50并且数组tem的大小也是50。在字符串末尾需要空终止(&#34; \ 0&#34;)字符。这就是为什么它没有打印第二个句号。

#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;

int main(){
    char tem[51];
    string pas="";
    cin.get(tem,51);
    cout<<tem<<endl;
    return 0;
}

enter image description here