Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何比较输入与ASCII代码?

如何比较输入与ASCII代码?
EN

Stack Overflow用户
提问于 2013-03-18 09:21:45
回答 5查看 4.5K关注 0票数 3

只要用户没有按下“空格”按钮,读入就会持续。提前感谢!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#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;
}
EN

回答 5

Stack Overflow用户

发布于 2013-03-18 09:44:09

你的代码有几个问题。最基本的是每次通过循环进行两次输入,第一次在while中,第二次在循环中使用>>。还要注意的是,第二个将跳过任何空格,然后将输入转换为整数。如果输入不能合法地转换为整数(例如,下一个字符是'a'),则输入将进入错误状态,并且cin.get()将始终返回EOF。当然,如果您正在输入数字,您可以很容易地输入比25更多的数字,从而使缓冲区溢出。

如果您只想输入一个数字序列,则:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
std::vector<int> fabcd;
int tmp;
while ( std::cin >> tmp ) {
    fabcd.push_back( tmp );
}

就是你所需要的。(数字必须用空格分隔。)如果你想输入数字,直到你遇到一个空格,下面这样的代码应该是有效的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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中。使用此函数时,循环将为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
std::vector<int> digits;
char tmp;
while ( std::get( tmp ) && ! std::isspace( tmp ) ) {
    digits.push_back( tmp );
}

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

编辑:

最后一点:空格或其他东西的实际数字代码取决于实现,不一定是32。此外,您还希望以类似的方式处理制表符和换行符。您应该始终使用isspace等函数。或者,如果您确实想检查一个空格,并且只想检查一个空格,请与' '进行比较,而不是32。

票数 4
EN

Stack Overflow用户

发布于 2013-03-18 09:24:51

(char)13表示回车符,而不是空格。

不是你要做的重点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
((char)cin.Get()) !=' '
票数 0
EN

Stack Overflow用户

发布于 2013-03-18 09:29:34

表示空格的acii代码是32。因此您应该替换64或13,这是carraiage为32:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
while((char)cin.get() != 32)

然而,问题可能是cin可能会在某些字符上停止,例如空格:根据C++, user input check for '\0' stops at spaces?,您可以通过设置: cin.unsetf(ios::skipws);来禁用此行为

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15473265

复制
相关文章

相似问题

ASCII输入值比较(C程序)

13

如何打印输入字符的ASCII代码

13

ASCII比较与字符串比较的差异

22

如何比较ASCII值

24

Python:如何将unicode与ascii文本进行比较?

32
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文