Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当cin需要int时检测char 当我在学校学习C++的时候,这不是一个家庭作业的问题,只是我遇到的一个奇怪的问题,我想知道如何为自己和将来的参考解决。_C++_Types_Typechecking - Fatal编程技术网

当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