【问题标题】:Using cin.get() to grab a line of text, then using it in a loop to display that line?使用 cin.get() 获取一行文本,然后在循环中使用它来显示该行?
【发布时间】:2010-12-07 17:55:01
【问题描述】:

好的,所以我在教科书中看到了这段代码 sn-p,它应该与用户输入的所有其他字符相呼应。现在,我理解了其他所有字符部分,但我在使用 cin 时遇到了困难。得到()。我明白为什么第一个 cin.get() 在那里,但为什么它也在循环内?我猜我没有完全掌握输入流的本质......

编辑:它刚刚点击...我是个白痴。感谢您解决这个问题。

char next;
int count = 0;
cout << "Enter a line of input:\n";
cin.get(next);

while (next != '\n')
{     
    if ((count%2) == 0)
    cout << next;
    count++;
    cin.get(next);
}

提前致谢!

【问题讨论】:

    标签: c++ inputstream


    【解决方案1】:

    cin.get 在这种情况下并没有像你想象的那样“抓取一行文本”。 cin.get 在这种情况下只抓取一个字符。使用cin.get,您可以一个接一个地读取用户正在输入的字符。这就是为什么你在一个循环中有cin.get

    【讨论】:

      【解决方案2】:

      在循环之前对 cin.get(next) 的调用只是将缓冲的用户输入的第一个字符放入变量“next”中。

      一旦进入循环,并且存储在 'next' 中的字符已被处理(如果在偶数索引处回显,否则将被忽略),需要再次调用 cin.get(next) 以检索下一个字符。

      【讨论】:

        【解决方案3】:

        它的打印字符出现在偶数位置

        char next;
        int count = 0;
        cout << "Enter a line of input:\n";
        cin.get(next);//gets first character (position zero) from input stream
        
        while (next != '\n')//check whether the character is not line feed(End of the line)
        {     
            if ((count%2) == 0)//checks if position is even
            cout << next;      //if yes print that letter
            count++;           //increments the count
            cin.get(next);     //gets next character from input stream
        }
        

        我们需要两个cin.get(...)

        • 在进入 while 循环之前,我们需要知道第一个字符(位置为零)
        • 在 while 循环中获取下一个字符

        【讨论】:

          【解决方案4】:

          但是 cin.get(ch) 外面有什么用它有什么作用 cin.get() 如何在循环内工作 两种行为看起来不同 所以这让人困惑 循环中有一条语句来打印使用 cin.get(next) 获得的字符,但它不会打印它....它会在按下回车键后一起打印...实际上它应该在我们键入时显示字符键盘,但实际上并没有那样工作

          【讨论】:

            【解决方案5】:

            istream& get(char &c) 从输入流中获取一个字符。

            所以在第一次调用 cin.get(next) 时,您键入: “你好世界!” 然后未来的 cin.get(next) 将在每次调用时获取 h、e、l、l 等......直到输入流中没有更多字符,届时它将阻止询问用户更多输入。

            【讨论】:

              【解决方案6】:

              C++ 中的流是缓冲的。把它们想象成一行字母。当您调用cin.get(var) 时,该行中的第一个字符将被删除并返回给您。所以,这就是它的工作原理。

              举个例子会更好。执行第一个 cin.get() 时,假设您输入:
              LISP
              然后,cin.get() 将返回(在变量中)L,然后缓冲区将看起来像 ISP... 下一次调用将把 I 放在变量中。并且缓冲区看起来像SP 等等......

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2018-11-30
                • 2021-12-21
                • 1970-01-01
                • 2018-03-12
                • 1970-01-01
                • 2020-02-24
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多