在C++中解析字符串中的数字

在C++中解析字符串中的数字,c++,c,if-statement,C++,C,If Statement,我试图解析存储在char[]变量中的数字,以便对其运行IF语句。我尝试过使用Atoi,但这不起作用,也许我实现错了 我也在C++中做了什么,这里代码片段 C C++ 由于您希望用户输入一个整数,您可能希望使用一个int变量来保存他们输入的内容: int port_number; do{ cout<<"Enter Port Number between 1-1024"<<endl;; cin>> port_number; if(por

我试图解析存储在char[]变量中的数字,以便对其运行IF语句。我尝试过使用Atoi,但这不起作用,也许我实现错了

<>我也在C++中做了什么,这里代码片段

C

C++


由于您希望用户输入一个整数,您可能希望使用一个int变量来保存他们输入的内容:

int port_number;

do{
    cout<<"Enter Port Number between 1-1024"<<endl;;
    cin>> port_number;

    if(port_number < 1 || port_number > 50){
        cout<<"Incorrect Input Retry"<<endl;;
    }
} while(port_number < 1 || port_number > 50);

但是请注意,这仍然有点过于简单-如果用户输入非数字的内容,例如abc,这将无法很好地处理它-它将陷入无限循环

工作正常,更易于阅读C++:

int data;
std::cout << "Enter Port Number between 1-1024" << std::endl;

while (std::cin >> data && (data < 1 || data > 1024))
    std::cout << "Please re-enter the port number!";

std::cout << "port number: " << data << std::endl;
提示:

使用原始数组是一个坏主意,因为在内存中可能会发生缓冲区溢出 你的案子也是!将std::vector与include或 std::数组。 避免空洞的陈述;;他们只是 无意义的 避免使用名称空间std;特别是在全局范围和头文件中,请参见 以大写字母开头的变量用于类和结构名称。
@user1949280:既然你想要一个数字结果,为什么它必须是一个字符,不管它是什么——尽管可能至少与字符有点类似。它必须是一个只包含数字的字符串。如果你想将它作为数字处理,为什么需要一个字符串?我会不会不苛求地假设其中包含了某种家庭作业?@user1949280我实际上根据你提问的方式假设你想要字符串输入,但你给出的代码并没有真正解释原因。这是真正的代码,还是您的用例不同,还是家庭作业?字符数据不是Int数据,我需要输入一个只包含数字的字符串。。。
int port_number;

do{
    cout<<"Enter Port Number between 1-1024"<<endl;;
    cin>> port_number;

    if(port_number < 1 || port_number > 50){
        cout<<"Incorrect Input Retry"<<endl;;
    }
} while(port_number < 1 || port_number > 50);
int data;
std::cout << "Enter Port Number between 1-1024" << std::endl;

while (std::cin >> data && (data < 1 || data > 1024))
    std::cout << "Please re-enter the port number!";

std::cout << "port number: " << data << std::endl;
std::string data;
int portNr;
do
{
    std::cout << "Enter Port Number between 1-1024" << std::endl;
    std::cin >> data;

    std::stringstream sstr (data);
    if ((sstr >> portNr).fail())
        continue;
}
while (portNr < 1 || portNr > 1024);