我在使用isdigit时遇到了麻烦.我阅读了文档,但是当我cout << isdigit(9)时,我得到一个0.我不应该得到1吗?
#include <iostream>
#include <cctype>
#include "Point.h"
int main()
{
std::cout << isdigit(9) << isdigit(1.2) << isdigit('c');
// create <int>i and <double>j Points
Point<int> i(5, 4);
Point<double> *j = new Point<double> (5.2, 3.3);
// display i and j
std::cout << "Point i (5, 4): " << i << '\n';
std::cout << "Point j (5.2, 3.3): " << *j << '\n';
// Note: need to use explicit declaration for classes
Point<int> k;
std::cout << "Enter Point data (e.g. number, enter, number, enter): " << '\n'
<< "If data is valid for point, will print out new point. If not, will not "
<< "print out anything.";
std::cin >> k;
std::cout << k;
delete j;
}
Run Code Online (Sandbox Code Playgroud)
Jam*_*lis 16
isdigit()用于测试字符是否为数字字符.
如果你把它称为isdigit('9'),它将返回非零值.
在ASCII字符集(您可能使用的)中,9表示水平制表符,它不是数字.
由于您使用I/O流进行输入,因此无需使用isdigit()验证输入.std::cin >> k如果从流中读取的数据无效,则提取(即,)将失败,因此如果您希望读取int并且用户输入"asdf",则提取将失败.
如果提取失败,则将设置流上的失败位.您可以测试此并处理错误:
std::cin >> k;
if (std::cin)
{
// extraction succeeded; use the k
}
else
{
// extraction failed; do error handling
}
Run Code Online (Sandbox Code Playgroud)
请注意,提取本身也会返回流,因此您可以简单地缩短前两行:
if (std::cin >> k)
Run Code Online (Sandbox Code Playgroud)
结果将是相同的.
isdigit()取一个int是角色的代表.字符9是(假设您使用的是ASCII)TAB字符.字符0x39或'9'(不是 9)是表示数字9的实际字符.
数字字符是ASCII中的整数代码0x30到0x39(或48到57) - 我重申,因为ASCII不是ISO C标准的要求.因此以下代码:
if ((c >= 0x30) && (c <= 0x39))
Run Code Online (Sandbox Code Playgroud)
我之前见过的,对于可移植性来说不是一个好主意,因为至少有一个实现使用EBCDIC - isdigit在所有情况下都是最好的选择.
| 归档时间: |
|
| 查看次数: |
8911 次 |
| 最近记录: |