C ++ цикл и длина строки - PullRequest
0 голосов
/ 30 января 2011

Если у меня есть следующий код C ++:

#include <iostream>
#include <string>
int main()
{
std::string str;
while (std::cin>>str)
std::cout<<str<<"\n"; 
std::cout<<str.length(); // UPDATE: str.length
return 0;
}

Когда я запускаю программу, не набираю string и не нажимаю Enter, я получаю вывод empty. Означает ли это, что цикл while работал и считал, что существует input, даже если он был пуст?

Как я могу завершить этот цикл?

Наконец, почему я не получаю length строки в моем выводе?

ОБНОВЛЕНИЕ: Я хочу решить проблему, используя string функции

Спасибо.

Ответы [ 4 ]

2 голосов
/ 30 января 2011

Потому что «enter» создает символ «возврата оператора».Он невидим и только начинает новую строку.Вы можете использовать объект istream и использовать функцию get (), которая возвращает количество прочитанных символов:

char ch;

while (cin.get (ch)) {}

1 голос
/ 30 января 2011

Введите код таким образом и установите точку останова в строке 4:

  std::string str;
  while (std::cin >> str)
  {
    std::cout << "you typed: " << str << "\n";
    std::cout << "str.length(): " << str.length() << "\n";;
  }
0 голосов
/ 30 января 2011

Ввод:

std::cin>>str

Считывает одно [белое] слово, отделенное пробелом от потока.
Включает пробел (пробел / табуляция и новая строка).

Это означает, что он игнорирует все пробелы, пока не получит символ, не являющийся пробелами.Затем он читает символы, пока не получит символ пробела.

Таким образом, если вы просто нажмете на новую строку (ввод), он будет игнорировать символ.Оно продолжает игнорироваться, пока не дойдет до слова.

Если вы хотите завершить цикл.У вас есть два варианта.Ищите специальное слово.Или введите символ EOF в поток.В Unix / Linux это делается с помощью -D в Windows -Z

0 голосов
/ 30 января 2011

В цикле while, std::cin>>str вернет true, если std::cin успешно прочитает данные в str, иначе вернет false.

, поскольку std::cin всегда можетчитать данные из входного потока, это означает, что while(std::cin >> str) будет бесконечным циклом, если вы не нажмете какую-либо клавишу, которая генерирует символ EOF.Комбинация клавиш, которая вырабатывает EOF, зависит от ОС. Есть еще одна вещь, которая может вырабатывать EOF, это если вы закроете поток ввода!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...