2016-10-06 3 views
0
#include<iostream> 
using namespace std; 

int main() 
{ 
    char txt; 
    cout << "Enter text (Enter '.' to quit)"; 

    while (txt != '.') 
    { 
     cin >> txt; 
     cout << txt; 
    } 

    return 0; 
} 

Я новичок в C++. В классе нас учили, что char содержит только один символ. Однако, когда я вставил cin << txt внутри цикла while, он вдруг может принимать более одного символа. Как возможно, что теперь char может хранить более одного символа? Может ли кто-нибудь предоставить ссылку, где я могу больше узнать об этом?Char тип данных и цикл while

+0

Он не имеет более одного значения, он получает новое значение, выводит это значение и повторяет его. – tkausl

+0

@NegativeTension буферизуется в буфере cin, поэтому после назначения cin очищает то, что он назначил из своего буфера – Raindrop7

ответ

0

Char не принимает более одного значения. Логика вашего цикла while показывает, что она принимает несколько значений в качестве входных данных, а затем возвращает их как результат. Предположим, что вход: привет. Так исполнение будет как этот

  • символ вар воли ч в качестве входных данных, а затем следуют ч, как выход.

  • В начало страницы e &10 so on до '. ', после чего цикл будет остановлен.

Таким образом, на самом деле он выполняет один символ ввода одного символа, который заставляет вас казаться, что он ведет себя как строка.

Если вы хотите увидеть подробную работу, используйте инструмент отладки для понимания или вставьте задержку между входом, выходом & следующей итерацией.

0

Что здесь происходит, когда вы вводите символ, вы вводите только один символ, но все остальные символы в вашей строке остаются в буфере. если вы меняете:

cout << txt; 

в

cout << txt << '\n'; 

, то он будет печатать символ, а затем перевод строки. Вы видите, что вы получите отдельные символы в каждой строке.

Надеюсь, это помогло!

0

char is char 1 имеет только байтовый наименьший тип данных в C++ как bool.

в вашем примере: вы вводите текст вместо одного символа, поэтому на самом деле этот текст буферизуется в буфере cin, а затем сбрасывает его в txt. txt - это один символ, поэтому он присваивает ему первый символ. но буфер все еще содержит другие символы и до тех пор, пока вы находитесь в бесконечно-условном цикле, cin присваивает второму символу txt вместо предыдущего и сына до символа las.

, чтобы получить то, что я говорю удалить COUT внутри контура и сделать его пределами:

символ TXT;

cout << "Enter text (Enter '.' to quit)"; 

while (txt != '.') 
    cin >> txt; 

cout << txt; // you'll get only the last character '.' 

причина:

допустим вы ввели: "Привет." она равна:

cin>>txt; // H 
cin>>txt; // e 
cin>>txt; // l 
cin>>txt; // l 
cin>>txt; // o 
cin>>txt; // . 

теперь TXT присваивается.', который является последним символом ввода

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