Ввод строки с двумя полными стопами - PullRequest
0 голосов
/ 29 апреля 2018

Мне нужно ввести строку с двумя остановками, но этот код не вводит последнюю остановку. Когда ввод: «Ум - это все. Кем вы думаете, вы становитесь». Далее следует клавиша ввода и «приседание»

Программа хранит: «Ум - это все. Кем вы думаете стать» в 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 голосов
/ 29 апреля 2018

Длина этой строки: «Ум - это все. Кем вы думаете, что станете». имеет значение 50, а массив tem также имеет размер 50.cin нуждается в нулевом символе завершения ("\ 0") в конце строки. Вот почему он не печатает второй полный стоп.

#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

0 голосов
/ 29 апреля 2018

Размер выделенного буфера составляет 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...