C++ Int函数不返回任何值
我做这个函数是为了将字符串转换成整数(学校作业),我的函数似乎不起作用,如果它拾取任何非数字数据,它应该返回INT_MAX。不管发生什么,它都不返回任何数据,而且似乎也不返回mainC++ 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
#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。这并不能解决问题,而是使用幻数(whileinput[i]<48 | | input[i]>57
),使用提供此信息的标准函数:while(std::is digit(input[i])
。这也将使您免受不常见但并非不存在的可能,即您将遇到不使用这些特定值的字符编码。这也不能解决问题,但input[i]-48]
最好写成input[i]-“0”
,语言定义说它适用于所有字符编码。请看。