当cin需要int时检测char 当我在学校学习C++的时候,这不是一个家庭作业的问题,只是我遇到的一个奇怪的问题,我想知道如何为自己和将来的参考解决。
搜索时,我没有看到任何与此直接相关的内容当cin需要int时检测char 当我在学校学习C++的时候,这不是一个家庭作业的问题,只是我遇到的一个奇怪的问题,我想知道如何为自己和将来的参考解决。,c++,types,typechecking,C++,Types,Typechecking,搜索时,我没有看到任何与此直接相关的内容 所以我在寻找int类型的输入,但是我注意到当运行一个程序时,如果接收到一个字符输入(不确定字符串),它被转换成int(我在我的教科书中读到这是正常的C++行为)。 我的问题是:既然类型char被自动转换为int,我如何在输入上测试它?我已经习惯了Python、Ruby、PHP等,通常有一些标准的库方法,但在这里搜索和谷歌搜索中似乎没有。下面是我发现这个问题时使用的精简版本 我也在想:C++从什么地方得到字符的值?是ASCII值还是其他值?如果你运行下面的
所以我在寻找int类型的输入,但是我注意到当运行一个程序时,如果接收到一个字符输入(不确定字符串),它被转换成int(我在我的教科书中读到这是正常的C++行为)。 我的问题是:既然类型char被自动转换为int,我如何在输入上测试它?我已经习惯了Python、Ruby、PHP等,通常有一些标准的库方法,但在这里搜索和谷歌搜索中似乎没有。下面是我发现这个问题时使用的精简版本
我也在想:C++从什么地方得到字符的值?是ASCII值还是其他值?如果你运行下面的代码,输入任何一个字母,你就会明白我在说什么
<>我看到了一些解决方案,其中包括外部库,但是希望在C++的标准库/分发中有一些东西来解决这个问题。 如果这是相关的:我的系统是OSX10.8,运行gcc 谢谢#include<iostream>
using namespace std;
int main()
{
int user_input;
int n;
cout << "Enter a number: ";
cin >> user_input;
for (n = 0; n < user_input; n++)
{
cout << n << endl;
}
cout << user_input << endl;
return 0;
}
#包括
使用名称空间std;
int main()
{
int用户输入;
int n;
cout>用户输入;
对于(n=0;n<用户输入;n++)
{
cout尝试将用户输入读取为c字符串,并使用atoi将其转换为int
这应该会有帮助。您应该检查失败的CIN:
....
cin >> user_input;
if (cin.fail())
cout << "Please enter numbers only" << endl;
else
{ // REST of your code }
。。。。
cin>>用户输入;
if(cin.fail())
库特
如何在输入上测试类型char
<>有几种机制可以使用。你可以考虑这2种:
样式1.
“c”样式是用isdigit()检查每个输入字符。
i、 e.将用户输入读入字符串,检查每个字符是否为数字,等等
std::cout << "Enter a number: ";
std::string user_input;
std::cin >> user_input;
for (int i=0; i<user_int.size(); i++
if (!isdigit(user_input[i])
throw "not a digit";
// if you get here, all the chars in user_input are digits,
// I suppose you might use atoi() to convert, but see next.
请注意,大多数C风格函数都会自动将字符升级为int。例如,isdigit()的输入被声明为int,因此升级使其更易于使用
C++也支持这项推广,但我猜这不是您看到的
std::cout << "Enter a number: ";
std::string user_input;
std::cin >> user_input;
const char* DIGITS = "0123456789";
size_t notaDigit = user_input.find_first_not_of(DIGITS);
if(notaDigit != std::string::npos)
throw "non-digit char found in user_input";
// if you get here, all chars are digits, so convert to integer.
// these days, I would do this in 4 steps.
int user_int = 0;
{
std::stringstream ss;
ss << user_input; // put char string into ss
ss >> user_int; // extract and convert to integer
} // discard and cleanup the stringstream at scope end
std::cout << "user_int: " << user_int << std::endl;
dmoen@C5:~/cvs-tools/lmbm/src_ut$ ./dmy24
Enter a number: 12
0
1
2
3
4
5
6
7
8
9
10
11
12
dmoen@DOMA5:~/cvs-tools/lmbm/src_ut$ ./dmy24
Enter a number: a
0
dmoen@DOMA5:~/cvs-tools/lmbm/src_ut$ ./dmy24
Enter a number: bcd
0
dmoen@DOMA5:~/cvs-tools/lmbm/src_ut$ ./dmy24
Enter a number: ABC
0