【问题标题】:Stop accepting input after 20 chars20 个字符后停止接受输入
【发布时间】:2016-02-22 14:01:27
【问题描述】:

我正在尝试了解如何使用 cin.get()。我只想接受 20 个字符的输入,但我尝试过的任何方法都可以用来检测进一步的输入停止

我接受一次输入一个字符并将其输入到一个数组中,如下所示:

void getInput(char arr[], int size) {
    char number = '0';
    for (int i = 0; i < size + 1; i++) {
        char number;
        cin.get(number);
        if ((number >= '0') && (number <= '9')) {
            arr[i] = number;
        }
        if ((number == ' ') || (number == '\n')) {
            break;
        }
    }
}

我试过做这样的事情,但是你可以看到我的理解不是很好:

if (number == '\n') {
    done == true;
}

例如,将整个内容包装在 while (!done) 中,但这在我输入 20 个或更少字符的情况下不起作用。

【问题讨论】:

  • 您并没有真正描述您的实际问题是什么。你希望这段代码做什么?它有什么作用? “停止接受输入”是什么意思?报告错误?忽略它?
  • 对不起@DavidSchwartz,我会更清楚。基本上我可能会输入 12345678901234567890 (20 位)并按回车键,它会正常工作,但我希望它只输入 1234567890123456789012345678901234567890 (40 位)的前 20 位数字并忽略其余部分。现在如果我输入超过 20 个数字,下次我做 cin 时会包括剩菜。
  • 所以你想读一行?如果是这样,为什么不编写代码来做到这一点?

标签: c++ arrays input char limit


【解决方案1】:

你可以初始化一个变量int count= 1;。在每次迭代中,您可以使用 count++; 递增它并进行检查

 if (count==20)
     break;

我希望这会有所帮助。

【讨论】:

  • 嘿,谢谢,但我不确定这是否有帮助。这不会只打破 if 循环吗?
  • @mc-lunar:请试试这个。输入 20 个字符后,它将退出 for 循环。 “如果”不是循环。这是一个条件语句。
  • 这实际上并没有解决我的问题 - 问题是剩余的输入。
  • @mc-lunar:剩余输入是什么意思?
【解决方案2】:

如果传递的 size 参数大于 20,可以将其向下舍入为 20。那么 for 循环最多会在 20 次迭代后中断。

#include <iostream>

using namespace std;

void getInput(char arr[], size_t size) {

    const size_t MAX_SIZE = 20;
    if (MAX_SIZE < size) {
        // 'round down' size if it's too big
        size = MAX_SIZE;
    }

    char number = '0';
    for (unsigned int i = 0; i < size; i++) {
        cin.get(number);
        if ((number >= '0') && (number <= '9')) {
            arr[i] = number;
        } else if ((number == ' ') || (number == '\n')) {
            break;
        }
    }
}

int main() {
    char arr[32] = {};
    // even though arr could fit 32 chars
    // only MAX_SIZE=20 numbers at most will be accepted
    getInput(arr, 32);
    cout << arr << endl;
    return 0;
}

我假设sizearr 的长度(还不能评论所以不能问这个),如果是这样,那么注意i &lt; size + 1;让我们 i 取从 0 到 size 的值,然后 for 循环最终到达数组末尾的 arr[size]。请改用i &lt; size

【讨论】:

    猜你喜欢
    • 2014-03-07
    • 2019-10-24
    • 1970-01-01
    • 2023-03-24
    • 2022-08-14
    • 2020-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多