我试图了解如何使用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个字符或更少字符的情况下这不起作用。
答案 0 :(得分:0)
您可以初始化变量int count= 1;
。每次迭代时,您都可以使用count++;
递增它并进行检查
if (count==20)
break;
我希望这会有所帮助。
答案 1 :(得分:0)
如果它超过20,你可以将传递的size
参数向下舍入为20.然后,在20次迭代后,for循环最多会中断。
#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;
}
我假设size
是arr
的长度(还不能评论,所以不能问这个),如果是,那么请注意做i < size + 1
;让i
从0到size
包含值,然后for循环最终到达arr[size]
,这不在数组的末尾。请改用i < size
。