【问题标题】:cin >> int given a string assigns int to 0cin >> int 给定一个字符串将 int 分配给 0
【发布时间】:2018-10-22 08:33:37
【问题描述】:

我遇到的问题是,如果您输入任何字符串,cin 会将 int 分配为 0。一个有趣的发现是,如果您稍后将 cin 带入一个字符串,您将获得您为 int 输入的整个字符串.由于某种原因,cin.fail() 总是返回 true,即使使用 cin.ignore() 等,并且 if(cin >> startingPosition) 也总是返回 true。那么,我如何让它甚至识别出它是一个字符串而不是一个 int 呢?如,如果它是一个字符串,我如何让它再次循环?

int getUserPosition(bool volatileCall = false) {
    cout << "Which slot do you want to drop the chip in (0-8)? " << endl;
    int startingPosition;
    cin >> startingPosition;
    while (startingPosition >= WIDTH || startingPosition < 0) {
    cout << "Invalid slot." << endl << endl;

        if (volatileCall) {
            return -1;
        }
        cout << "Which slot do you want to drop the chip in (0-8)? " << endl;
        cin >> startingPosition;
        cout << startingPosition << endl;

    }
    return startingPosition;
}

【问题讨论】:

标签: c++ cin


【解决方案1】:

你必须保存来自 cin 的结果

isNumber = (cin &gt;&gt; startPosition);

整个代码看起来像

int getUserPosition(bool volatileCall = false) {
    cout << "Which slot do you want to drop the chip in (0-8)? " << endl;
    int startingPosition;
    bool isNumber = (cin >> startingPosition);
    while(isNumber && (startingPosition >= WIDTH || startingPosition < 0)) {
        cout << "Invalid slot." << endl << endl;
        if (volatileCall) {
            return -1;
        }
        cout << "Which slot do you want to drop the chip in (0-8)? " << endl;
        isNumber = (cin >> startingPosition);
        cout << startingPosition << endl;
    }
    return startingPosition;
}

【讨论】:

  • 这根本行不通。 bool isNumber = (cin &gt;&gt; startingPosition);自C++11起无效,while中的测试反了,需要清除cin的状态才能从错误中恢复。
  • @n.m.你说的对。我不在 C++11 中测试它。我稍后会解决这个问题
猜你喜欢
  • 2015-05-20
  • 1970-01-01
  • 2020-07-23
  • 1970-01-01
  • 1970-01-01
  • 2013-10-15
  • 2018-02-03
  • 2018-10-08
  • 2012-11-12
相关资源
最近更新 更多