2011-01-30 2 views
0

Если у меня есть следующий код C++: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 строки в моем выходе?

UPDATE:Я хочу, чтобы решить эту проблему с помощью функции string

Спасибо.

+0

Я думаю, что он получит компиляцию Time Error. Что такое s? –

+0

@Javed Акрам.Я изменил 's', но вопрос remaons действителен. Спасибо – Simplicity

+0

Я решил проблему. Кажется, я забыл вставить {} вокруг ** ** ** 'std :: cout'. Спасибо – Simplicity

ответ

1

Наберитекод этот путь и установить контрольную точку в строке 4:

std::string str; 
    while (std::cin >> str) 
    { 
    std::cout << "you typed: " << str << "\n"; 
    std::cout << "str.length(): " << str.length() << "\n";; 
    } 
0

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

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

2

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

char ch;

в то время (cin.get (ч)) { }

+0

Разве нет способа сделать это с помощью 'string' функций? Спасибо – Simplicity

+0

Прошу прощения, но get() из istream не принимает строки. Вы можете посмотреть ссылку здесь: http://www.cplusplus.com/reference/iostream/istream/get/ Но я могу посоветовать вам назвать string.push_back (ch); вызов в цикле. – Kos

0

вход:

std::cin>>str 

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

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

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

Если вы хотите сделать контур цикла. У вас есть два варианта. Найдите особое слово. Или вводите символ EOF в поток. В Unix/Linux это делается с помощью <ctrl> -D on WIndows <ctrl> -Z

Смежные вопросы