【问题标题】:C++ cin.get before a loop循环前的 C++ cin.get
【发布时间】:2011-05-03 10:20:46
【问题描述】:

大家好,我正在设计一个 C++ 程序,它读取一个或多个以负数结尾的正实数序列。为了测试这是否正确完成,我正在输出用户输入的第 5 个数字。我正在使用 while 循环来填充我的数组但是,我的 cin.get(x) 使我的程序无法编译。请帮助我修复我的代码。

P.S 如果有任何帮助,这是编译器错误:

solution1.cpp:在函数‘int main()’
solution1.cpp:19:错误:没有匹配函数调用‘std::basic_istream<char, std::char_traits<char> >::get(int&)’

/usr/include/c++/4.4/istream:280:
注意:候选人是:typename std::basic_istream<_CharT, _Traits>::int_type std::basic_istream<_CharT, _Traits>::get() [with _CharT = char, _Traits = std::char_traits<char>]

/usr/include/c++/4.4/istream:294:
注意:std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::get(_CharT&) [with _CharT = char, _Traits = std::char_traits<char>]

/usr/include/c++/4.4/istream:321:
注意:std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::get(_CharT*, std::streamsize, _CharT) [with _CharT = char, _Traits = std::char_traits<char>]

/usr/include/c++/4.4/istream:332:
注意:std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::get(_CharT*, std::streamsize) [with _CharT = char, _Traits = std::char_traits<char>]

/usr/include/c++/4.4/istream:355:
注意:std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::get(std::basic_streambuf<_CharT, _Traits>&, _CharT) [with _CharT = char, _Traits = std::char_traits<char>]

/usr/include/c++/4.4/istream:365:
注意:std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::get(std::basic_streambuf<_CharT, _Traits>&) [with _CharT = char, _Traits = std::char_traits<char>]

#include <iostream> 
using namespace std; 

int main() 
{
    char num[100] = {0};
    int y = 0;
    int x = 0;
    int flag = 0;

    cout << "Please enter line of numbers: ";

    while (flag > 0)
    {
        cin.get(x);

        if (x < 0)
        {
            flag = -1;
        }
        else
        {
            num[y] = x;
            y = y + 1;
        }
    }

    cout << "           " << num[4] << endl;

    return 0;
}

【问题讨论】:

标签: c++


【解决方案1】:

如果您真的想逐个字符地阅读,请将cin.get(x) 更改为x = cin.get(),但从上下文来看,我猜您想阅读一个整数。为此,请使用cin &gt;&gt; x

【讨论】:

    【解决方案2】:

    如果您尝试从命令行读取整数,则语法为cin &gt;&gt; x;cin.get() 读取单个字符,并按值返回。

    【讨论】:

    • 感谢我的程序符合要求。但是,虽然大声笑我的程序不起作用哈哈,但我一定是写得不好。你能猜到为什么当我改变它时程序什么都不做吗?
    • 您从“flag=0”开始。然后你的while循环说“while(flag>0)”。由于 0 不大于 0,因此完全跳过了 while 循环,您的程序什么也不做。
    • @Brandon: 因为你将flag 初始化为零,所以程序永远不会进入while (flag &gt; 0) 块。将其设为布尔值可能更清楚,并使用名称(如done)来指示其用途。然后将其用作bool done = false;while (!done)done = true;。或者完全放弃它,完成后使用break 退出循环。
    【解决方案3】:

    使用“x=cin.get();”而不是“cin.get(x);”

    有关更多信息,请参阅下面提到的链接中 cin.get 的所有变体,

    http://www.cplusplus.com/reference/iostream/istream/get/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-13
      • 1970-01-01
      • 1970-01-01
      • 2014-03-10
      • 1970-01-01
      • 2011-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多