c++ - 如何比较输入与 ASCII 码?

标签 c++ while-loop compare ascii

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

最佳答案

您的代码有几个问题。最根本的 是你每次通过循环做两个输入,第一个 在 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,前提是它不在 EOF。 使用这个函数,循环将是:

std::vector<int> digits;
char tmp;
while ( std::get( tmp ) && ! std::isspace( tmp ) ) {
    digits.push_back( tmp );
}

(您可能还想使用 std::isdigit,而不是 ! std::ispace 来控制循环。)

编辑:

最后一点:空格或其他内容的实际数字代码 取决于实现,不一定是 32。 此外,您需要类似地处理制表符和换行符。你 应始终使用 isspace 等函数。或者如果你 真的很想查一个空格,而且只有一个空格,比较一下 使用 ' ',而不是 32。

关于c++ - 如何比较输入与 ASCII 码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15473265/

相关文章:

c++ - 使用嵌套 std::vector 在 C++ 中实现 3D 矩阵

c++ - 当 A 和 B 为 "the same"时断言(sizeof(A) == sizeof(B)) 是否安全?

php - 使用从 SQL 数据库 php dpo 到 html 表的 while 循环显示数据不起作用

c++ - While 在 C++ 中使用定时器循环

java - 需要比较 ArrayList 中的对象以返回最高值

c++ - 删除指向不完整类型和智能指针的指针

c++ - 拷贝构造函数问题

php - 当它是 PHP 中的最后一个元素时写一个点而不是逗号

c# - 如何比较两个数据表的单元格值

mysql - 比较2个大sql文件,找不同点恢复数据