如何将输入与ASCII代码进行比较?

时间:2013-03-18 09:21:45

标签: c++ while-loop compare ascii

我正在尝试编写一个控制台程序,它从输入中获取一个数字并将其放入一个数组中。只要用户没有点击“空格”按钮,读入就会持续。我尝试了几件事,但我的程序不会将输入与“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;
}

5 个答案:

答案 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;
}