好的,我想我明白你想要在没有循环的情况下做什么。尽管您可能需要删除我对整数输入的限制,以确保输入单个数字以转换为 ASCII '0'->'9'。如果我按照你的问题,你希望能够接受一个数字或一个字符,验证它是否在[A-Za-z] 或[0-9] 的范围内,并输出相应的 ASCII 字符和 ASCII 字符值(反之亦然) .
例如,如果用户输入以下内容,您需要类似的输出:
input output
----- -------------------------------------------
5 '5' 5
121 'y' 121
y 'y' 121
200 error: integer out of range
= error: character no within requested range
P 'P' 80
为了完成此任务,您基本上需要尝试读取整数,验证是否发生不可恢复标签cin.eof() || cin.bad() 并退出并出错。否则出现cin.fail() 并且输入为非整数并保留在stdin 中,您可以在其中cin.clear() failbit,然后尝试读取字符。
读取字符后,您具有相同的基本验证,除了没有理由清除 failbit,因为您尝试读取整数然后字符在此时失败。
在充分阅读 int 或 char 后,您只需执行所需的验证以确保 int 或 char 在范围内,然后根据需要格式化输出。
带有必要验证的简短示例如下:
#include <iostream>
using namespace std;
int main (void)
{
cout << "Enter a digit or upper or lower case character : ";
int in_int;
char in_char;
if (!(cin >> in_int) ) { /* attempt read of int */
/* if eof() or bad() return error */
if (cin.eof() || cin.bad()) {
cerr << "(user canceled or unreconverable error)\n";
return 1;
}
cin.clear(); /* clear failbit */
}
else { /* good integer read */
if (in_int >= 0 && in_int <= 9) { // checking ASCII [0-9]
cout << "'" << (char)(in_int + '0') << "' " << in_int << endl;
}
else if (in_int >= 'A' && in_int <= 'z') // checking ASCII [A-Za-z]
cout << "'" << (char)in_int << "' " << in_int << endl;
else {
cerr << "error: integer input out of range.\n";
return 1; /* return failure */
}
return 0; /* return success */
}
if (!(cin >> in_char) ) { /* attempt read of char */
/* if eof() or bad() return error */
if (cin.eof() || cin.bad()) {
cerr << "(user canceled or unreconverable error)\n";
return 1;
}
else if (cin.fail()) /* if failbit */
cerr << "error: invalid input.\n";
return 1;
}
else { /* good character input */
if (in_char >= 'A' && in_char <= 'z') // checking ASCII [A-Za-z]
cout << "'" << in_char << "' "
<< static_cast<int>(in_char) << endl;
else
cerr << "error: character not within requested range.\n";
return 1;
}
}
使用/输出示例
$ ./bin/cinonechar
Enter a digit or upper or lower case character : 5
'5' 5
$ ./bin/cinonechar
Enter a digit or upper or lower case character : 121
'y' 121
$ ./bin/cinonechar
Enter a digit or upper or lower case character : y
'y' 121
$ ./bin/cinonechar
Enter a digit or upper or lower case character : 200
error: integer input out of range.
$ ./bin/cinonechar
Enter a digit or upper or lower case character : =
error: character not within requested range.
$ ./bin/cinonechar
Enter a digit or upper or lower case character : P
'P' 80
查看一下,如果您还有其他问题,请告诉我。您可以调整 int 值范围的测试,以纠正我对您的问题打算的范围的任何误解。