我正在尝试编写一个控制台程序,它从输入中获取一个数字并将其放入一个数组中。只要用户没有点击“空格”按钮,读入就会持续。我尝试了几件事,但我的程序不会将输入与“space”的ASCII代码进行比较。提前谢谢!
#include <iostream>
using namespace std;
int main()
{
int fabcd[25],number_of_items = 0;
cout << "The read in loop lasts while you don't hit space:\n";
while((char)cin.get() != 32)
{
cin >> fabcd[number_of_items];
number_of_items++;
}
return 0;
}
答案 0 :(得分:3)
您的代码存在一些问题。最根本的
是你每次通过循环做两个输入,第一个
在while
中,第二个在循环中使用>>
。请注意
第二个将跳过任何空格,然后将输入转换为
整数。如果输入无法合法转换为
整数(例如下一个字符是'a'
),输入就是
进入错误状态,cin.get()
将始终返回EOF
。
当然,如果你输入数字,你可以很容易
输入超过25
,并超出缓冲区。
如果您只想输入一系列数字,那么:
std::vector<int> fabcd;
int tmp;
while ( std::cin >> tmp ) {
fabcd.push_back( tmp );
}
就是你所需要的。 (数字必须用白色分隔 空格。)如果你想输入数字,直到你 遇到一个白色的空间,如下所示 工作:
std::vector<int> digits;
int tmp = std::cin.get();
while ( tmp != EOF && ! std::isspace( tmp ) ) {
digits.push_back( tmp /* or tmp - '0' */ );
tmp = std::cin.get();
}
请注意std::cin.get()
的结果已分配给。{
int
,不 char
。此函数返回int
故意,因为它必须能够返回带外
价值EOF
。这有几个变种:如果你使用
std::cin::peek()
,而不是std::cin::get()
,而不是std::get( char& )
实际上提取角色(你必须要做的)
环);并且还有char
,它提取了
在给定std::vector<int> digits;
char tmp;
while ( std::get( tmp ) && ! std::isspace( tmp ) ) {
digits.push_back( tmp );
}
中的字符,前提是它不在EOF中。
使用此函数,循环将是:
std::isdigit
(您可能还想使用!
std::ispace
代替isspace
来控制循环。)
最后一点:空格或其他的实际数字代码
取决于实现,不必然是32。
此外,您还希望类似地处理标签和换行符。您
应始终使用' '
等功能。或者如果你
真的很想检查一个空间,只有一个空间,比较
使用{{1}},而不是32。
答案 1 :(得分:0)
(char)13是回车而不是空格。
不是你要做的事情:
((char)cin.Get()) !=' '
答案 2 :(得分:0)
空间的acii代码是32.所以你应该替换64或13,这是carraiage返回32:
while((char)cin.get() != 32)
但问题可能是cin可能会停止某些字符,例如空格:您可以通过设置:cin.unsetf(ios :: skipws);来禁用此行为。 根据{{3}}
答案 3 :(得分:0)
以下是答案:
int fabcd[25],number_of_items = 0;
cout << "The read in loop lasts while you don't hit space:\n";
char a;
while((a=cin.get()) != ' ')
{
fabcd[number_of_items]=a;
number_of_items++;
}
return 0;
答案 4 :(得分:0)
试试这个:
#include <iostream>
#include <conio.h >
using namespace std;
int main()
{
int fabcd[25],number_of_items = 0;
cout << "The read in loop lasts while you don't hit space:\n";
while( _kbhit() != 32 )
{
char ch =getche();
if (ch != 32 )
{
cin >> fabcd[number_of_items];
number_of_items++;
}
else
break;
}
cout << "\nnumber of items:"<<number_of_items;
cin.get();
cin.get();
return 0;
}