【问题标题】:Int function not returning any valueInt 函数不返回任何值
【发布时间】:2018-10-15 17:37:12
【问题描述】:

我创建了这个函数来将字符串转换为整数(学校作业),但我的函数似乎不起作用,如果它拾取任何非数字数据,它应该返回 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;
}

【问题讨论】:

  • 这并没有解决问题,而是使用提供此信息的标准函数而不是使用幻数(input[i] &lt; 48 || input[i] &gt; 57):while (std::is digit(input[i])。这也使您免受不常见但并非不存在的可能性,即您会遇到不使用这些特定值的字符编码。
  • 这也没有解决问题,但input[i] - 48] 最好写成input[i] - '0',语言定义说它适用于所有字符编码。

标签: c++ function int return


【解决方案1】:

您的第二个和第三个 while 循环不会增加 i,因此您最终会永远循环在同一个数字上,并且永远不会到达 '\0'

就是这个

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

i 永不改变。

【讨论】:

  • 是的,我在发布后立即发现了这一点,但修复后仍然没有结果:/我的意思是如果函数有一个字符串参数,c++ 应该知道我在输入时的意思[I] - 48(在关于 48 在 ascii 表上为 0),对吗?
  • 是的,刚刚更新。它必须接近。在终端中输入我的字符串后,光标并单击回车,字符串消失并且光标不动。
  • @IsMrBrightside 我建议使用带有调试器(如 Visual Studio)的 IDE,这样您就可以进入调试器并准确查看它停止的位置以及它在做什么。还要确保您了解如何单步执行并在调试器中查看变量的值。
  • @IsMrBrightside 你的代码对我有用。不过,您需要将 49 改回 48。
猜你喜欢
  • 2021-03-05
  • 1970-01-01
  • 2018-11-19
  • 2021-05-03
  • 1970-01-01
  • 1970-01-01
  • 2012-11-27
  • 1970-01-01
  • 2022-08-16
相关资源
最近更新 更多