【问题标题】:checking success of taking input检查输入是否成功
【发布时间】:2020-04-01 09:29:39
【问题描述】:

我是C++ 的新手。我对C 有一些了解,我知道不应该假设C 规则与C++ 相同。我只是在寻找一些相同的解决方案。

例如在C中我们使用时:

int a;
if (scanf ("%d", &a) != 1);

检查是否输入了有效值。例如,如果不是整数,而是一个字符作为输入,这将告诉我们scanf 未能将整数作为输入。

但是在C++ 中,当我向程序输入m 时,我调试了这段代码:

    int a;
    cin >> a;

并将0 分配给a,但我对scanf 做了同样的事情,a 的值是-858993460。(而a 在两种语言中的默认值是-858993460

所以这是我的问题,我如何知道cin 是否未能接受有效输入?通常,0C++ 代码中分配给a?如果这很正常,我怎么知道输入的数据真的是0 还是失败的结果?有没有办法检查cin 是否成功?

PS:对不起,如果这个问题很愚蠢。我是c++ 的新手。

【问题讨论】:

  • “我知道不应该将 C 规则与 C++ 进行比较”为什么不呢?你只是不应该假设它们是相同的
  • See this questioncin 返回一个值,指示输入操作是成功还是失败。
  • 两个 'a 都没有初始化为任何东西,它们只是具有内存中该位置的随机值。

标签: c++ c input


【解决方案1】:

你可以通过 good() 函数来检查这个

#include <iostream>

using namespace std;

int main()
{
     int i=0;

     if( ! ( (cin>>i).good() ) )
        cout<<"Error";
     else
        cout<<i;

     return 0;
}

见下文:

cin 返回对它的引用并且 istream(cin 是 istream 的一个对象)包含一个函数 good() 如果流处于良好状态则返回 true,否则返回 false。

【讨论】:

  • if( ! ( (cin&gt;&gt;i).good() ) )if (!cin &gt;&gt; i) 相同
猜你喜欢
  • 1970-01-01
  • 2018-04-15
  • 2023-03-23
  • 2018-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-10
相关资源
最近更新 更多