C++ Int函数不返回任何值

C++ Int函数不返回任何值,c++,function,int,return,C++,Function,Int,Return,我做这个函数是为了将字符串转换成整数(学校作业),我的函数似乎不起作用,如果它拾取任何非数字数据,它应该返回INT_MAX。不管发生什么,它都不返回任何数据,而且似乎也不返回main #include <iostream> #include <climits> #include <string> using namespace std; int stringToInt(string input){ int i = 0; if(input

我做这个函数是为了将字符串转换成整数(学校作业),我的函数似乎不起作用,如果它拾取任何非数字数据,它应该返回INT_MAX。不管发生什么,它都不返回任何数据,而且似乎也不返回main

#include <iostream>
#include <climits>
#include <string>

using namespace std;


int stringToInt(string input){
    int i = 0;

    if(input[i] == '-'){
        i++;
        //First while loop controls valid input
        while(input[i] != '\0'){
            if(input[i] < 49 || input [i] > 47){///Can't figure this out
                return INT_MAX;
            }
            i++;
        }
    }
    //Now to calculate result
    int result = 0;
    i = 0;
    if (input[i] == '-'){
        i++;
        while (input[i] != '\0'){
            result = (input[i] - 49) + (result * 10);
            i++;
        }
        result = result * (-1);
        return result;

    }
    else{
        while (input[i] != '\0'){
            result = (input[i] - 49) + (result * 10);
            i++;
        }
        return result;
    }
}


//////MAIN////////
int main(){
    string number;
    int actualNumber;
    int answer;

    cout << "This is my main function. Enter a string to evaluate" << endl;
    getline(cin, number);

    actualNumber = stringToInt(number);

    cout << actualNumber;
    cout << endl;



    return 0;
}
#包括
#包括
#包括
使用名称空间std;
int stringToInt(字符串输入){
int i=0;
如果(输入[i]='-'){
i++;
//首先,while循环控制有效输入
while(输入[i]!='\0'){
如果(input[i]<49 | | input[i]>47){///无法理解这一点
返回INT_MAX;
}
i++;
}
}
//现在来计算结果
int结果=0;
i=0;
如果(输入[i]='-'){
i++;
while(输入[i]!='\0'){
结果=(输入[i]-49)+(结果*10);
i++;
}
结果=结果*(-1);
返回结果;
}
否则{
while(输入[i]!='\0'){
结果=(输入[i]-49)+(结果*10);
i++;
}
返回结果;
}
}
//////主要////////
int main(){
字符串编号;
int实际数字;
int答案;

cout您的第2个和第3个while循环不会增加
i
,因此您将永远在同一个数字上循环,并且永远不会到达
'\0'

这个

    while (input[i] != '\0'){
        result = (input[i] - 48) + (result * 10);
    }

<>代码> i <代码>永远不变。< /P>是我在发布后捕获了这个错误,并且在修复之后仍然没有结果:/我的意思是如果函数有一个字符串参数,C++应该知道输入[i] - 48(在ASCII表上是48个0)时的意思。,对吗?是的,刚刚更新。它必须很近。在终端中输入字符串后,光标并单击enter,字符串消失,光标不移动。@IsMrBrightside我建议使用IDE和Visual Studio之类的调试器,这样你就可以进入调试器,准确地看到它停止的位置和正在执行的操作。同时当然你知道如何单步执行并在调试器中查看变量的值。@IsMrBrightside你的代码对我来说很有用。但你需要将49改回48。这并不能解决问题,而是使用幻数(while
input[i]<48 | | input[i]>57
),使用提供此信息的标准函数:
while(std::is digit(input[i])
。这也将使您免受不常见但并非不存在的可能,即您将遇到不使用这些特定值的字符编码。这也不能解决问题,但
input[i]-48]
最好写成
input[i]-“0”
,语言定义说它适用于所有字符编码。请看。