Making Conditional isdigit()
Making Conditional isdigit()
首先看看我的代码:
#include <iostream>
#include <ctype.h>
using namespace std;
int main()
{
int a,b;
cout << "Enter two digits" << endl;
cin >> a >> b;
if (isdigit(a))
if (isdigit(b))
cout << a+b << endl;
else
cout << "Invalid Digit";
return 0;
}
因此,当我们键入一些输出时,只有空格。如果用户点击非数字或任何Alpha,我想打印程序应该显示无效字符串,或者如果用户点击任何数字,它必须显示两位数字的总和
由于您正在读取int
变量,您输入的任何内容都必须是整数,否则输入运算符将失败。如果要读取字符并检查它们是否为数字,则应读取char
变量,然后在对它们进行操作之前,需要将它们转换为正确的整数值。
试试类似的东西:
inline int to_int(const char ch)
{
return ch - '0';
}
// ...
char a, b;
if (std::cin >> a >> b)
{
if (std::isdigit(a) && std::isdigit(b))
std::cout << to_int(a) + to_int(b) << 'n';
else
std::cout << "One is not a digitn";
}
else
std::cout << "Error in inputn";
如果你只想输入两个通用的整数值,那么你已经走上了正确的轨道,你只需要确保输入是正确的:
int a, b;
if (std::cin >> a >> b)
std::cout << a + b << 'n';
else
std::cout << "Error in input (most likely not integers in input)n";
你正在做的根本不是你想做的。
如果传入的值是数字,则isdigit
返回true。如果被解释为字符的输入是一个数字,那就是真的。这与您想要的不一样,因为如果我们假设使用传统的欧洲语言和ASCII字符编码,那么如果a
或b
中的值在48..57范围内,则isdigit
将为真。
我想,您要做的是检查a
和b
是否是有效的整数值。在这种情况下:
if (cin >> a >> b)
{
cout << a + b << endl;
}
else
{
cout << "Invalid digit" << endl;
}
将是正确的做法。
相关文章:
- 瓦尔格林德:数学函数"Conditional jump or move depends on uninitialised value(s)"
- C++中是否存在 std::conditional 的懒惰等价物?
- 是否存在包含负号的isdigit函数(过载)
- CPP 中的瓦尔格林德和记忆泄漏:"Conditional jump or move depends on uninitialised values"
- 使用 ISdigit 通知任何检测到的非法字符
- 为什么"std::isdigit"在 Windows 上报告C++"no matching overloaded function"
- 使用std::conditional中的模板来确定函数参数类型
- QChar 如果 'isDigit()' 则获取数字值
- 如何在 GCC 中启用 C/C++ "Conditional with Omitted Operand"(又名猫王操作员 "?:" )
- isdigit(c) - 字符或整数类型?
- 使用 isdigit 和 isalpha 设置相等的 char 数组
- isdigit() 和 isalnum() 给出错误,因为输入是一个常量字符并且无法转换。其他可能查看输入是否为数字的方法?
- std::conditional - 嵌套用法
- "std::isdigit"正在崩溃几个扩展的 ASCII 字符
- isdigit,如何区分字符和数字
- 将 std::conditional 与不可转换类型(原始与指针)一起使用
- 是否可以将isdigit,isalpha函数与输入的字符串数组一起使用
- std::cout doen不喜欢 std::endl 和 String in conditional-if
- 如何使用 isdigit() 检查是否有多个字符
- Making Conditional isdigit()