【问题标题】:Char data type and while loopChar 数据类型和 while 循环
【发布时间】:2016-10-06 00:14:22
【问题描述】:
#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 只包含一个字符。但是,当我在while 循环中插入cin &lt;&lt; txt 时,它突然可以占用多个字符。 char 现在怎么可能突然存储多个字符?有人可以提供一个链接,让我可以阅读更多相关信息吗?

【问题讨论】:

  • 它不包含多个值,它获取一个新值,将这个值打印出来并重复。
  • @NegativeTension 它被缓冲在 cin 的缓冲区中,因此在分配后 cin 会从其缓冲区中清除分配的内容

标签: c++ loops while-loop char character


【解决方案1】:

Char 的值不超过一个。您的 while 循环逻辑使它看起来需要多个值作为输入,然后将其作为输出返回。 假设像输入是:你好。 所以执行会是这样的

  • char var 将 h 作为输入,然后将 h 作为输出。

  • 后跟 e 等直到 '。 ' 之后,while 循环将停止。

所以实际上它是一个字符输入一个字符连续输出,这让你看起来它的行为像字符串。

如果您想查看详细的工作,请使用调试工具来理解或在输入、输出和下一次迭代之间插入延迟。

【讨论】:

    【解决方案2】:

    这里发生的情况是,当您输入字符时,您只输入了一个字符,但字符串中的所有其他字符都保留在缓冲区中。如果你改变:

    cout << txt;
    

    cout << txt << '\n';
    

    然后它将打印字符,然后是换行符。您会看到每行都有单独的字符。

    希望这有帮助!

    【讨论】:

      【解决方案3】:

      char is char 1 仅将 byte 保存为 c++ 中最小的数据类型为 bool。

      在您的示例中: 您输入的是文本而不是单个字符,因此实际上该文本缓冲在 cin 的缓冲区中,然后将其刷新到 txt。 txt 是单个字符,因此它可以将第一个字符分配给它。但是缓冲区仍然包含其他字符,只要您处于无限条件循环中,cin 会将第二个字符分配给 txt 而不是前一个字符,然后再分配到 las 字符。

      要得到我所说的,从内部循环中删除 cout 并将其置于外部:

      char 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 被分配了 '.'这是最后一个输入字符

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-05
        • 1970-01-01
        • 2021-10-15
        • 2017-03-10
        • 2012-01-07
        • 2012-02-22
        • 1970-01-01
        • 2016-11-19
        相关资源
        最近更新 更多