-4

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

我也在 C++ 中做什么,这两个代码片段

C

char Data[50]; 

do{
    printf("Enter Data Number between 1-50:\n");
    scanf("%i", &pPacket->Data);

    atoi(&pPacket->Data);

    if(pPacket->Data < 1 || pPacket->Data > 50){
        printf("Incorrect Input Retry.\n");
    }
} while(pPacket->Data < 1 || pPacket->Data > 50);

C++

char Data[50];

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

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

2 回答 2

0

工作得很好,更容易阅读(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::stringand std::stringstream

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);

提示:

  • 使用原始数组是一个坏主意,因为可能会发生缓冲区溢出(在您的情况下也是如此!)请改用 std::vector (with #include <vector>)或 std::array 。
  • 避免空语句“;;” (他们只是毫无意义)。
  • 避免using namespace std;(尤其是在全局作用域和头文件中)(参见这篇文章
  • 以大写字母开头的变量用于类和结构名称。
于 2013-05-09T13:26:59.250 回答
0

由于您希望用户输入一个整数,因此您可能希望使用一个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”),这将无法很好地处理它——它会陷入无限循环。

于 2013-05-09T13:23:26.890 回答