C++ 如何使用c++;

C++ 如何使用c++;,c++,C++,这是我的代码: #include <iostream> #include <string> #include <sstream> int main() { std::string userInput; std::getline(std::cin, userInput); int sum; int result; std::string numDigit; bool space = true; fo

这是我的代码:

#include <iostream>
#include <string>
#include <sstream>

int main() {

    std::string userInput;
    std::getline(std::cin, userInput);

    int sum;
    int result;
    std::string numDigit;
    bool space = true;

    for (int i = 0; i < userInput.length(); i++) {

        if (isdigit(userInput[i]) && space) {

            numDigit += userInput[i];
            space = false;
        }else if(isdigit(userInput[i]) && !space) {

            numDigit += userInput[i];

        }else if (!isdigit(userInput[i]) && !space) {

            std::stringstream(numDigit) >> result;
            sum += result;
            numDigit = "";
            result = 0;
            space = true;

        }

        std::cout << sum;

    }

}
#包括
#包括
#包括
int main(){
std::字符串用户输入;
std::getline(std::cin,userInput);
整数和;
int结果;
std::字符串numDigit;
布尔空间=真;
对于(int i=0;i>结果;
总和+=结果;
numDigit=“”;
结果=0;
空格=真;
}

std::cout您正在使用变量和结果,而不初始化它们

当您使用任何编译器时,您不能假设变量将自动初始化为零。因此,如果您使用未初始化的变量,程序的行为将是未定义的,它可能正好是您想要的值,或者它将被诸如80123901723012、-190283812791等垃圾值填充

int sum = 0;
int result = 0;
声明一个变量并将其初始化为零始终是一种好的做法


编辑:

您的代码存在的问题是:
1.在for循环结束后,只应输出
sum

2.您应该检查
i结果;
总和+=结果;
numDigit=“”;
结果=0;
空格=真;
}
}

std::cout您正在使用变量和结果,而不初始化它们

当您使用任何编译器时,不能假定变量将自动初始化为零。因此,如果您使用未初始化的变量,程序的行为将是未定义的,它可能只是您想要的值,或者它将被诸如80123901723012、-190283812791等垃圾值填充

int sum = 0;
int result = 0;
声明一个变量并将其初始化为零始终是一种好的做法


编辑:

您的代码存在的问题是:
1。您应该只在for循环结束后输出
sum

2。您应该检查
i结果;
总和+=结果;
numDigit=“”;
结果=0;
空格=真;
}
}


std::您是否知道值
0
“0”
的内部表示之间的差异,即(与ASCII一样,在许多当前系统上都是如此)
48
?解决此类问题的正确工具是调试器。在询问堆栈溢出之前,应该逐行检查代码。如需更多帮助,请阅读。至少,您应该[编辑]您的问题,以包含一个重现您的问题的示例,以及您在调试器中所做的观察。@RadLexus-
“0”
是一个字符串文字,由两个字符组成
'0'
'\0'
@RadLexus-除了打字错误,您还有什么意思?代码不依赖于字符编码的细节;它构造一个字符串,并使用流提取器获取该字符串中的文本表示的数值。在这方面,代码很好。@ShadowLegend-这里有一些混乱;代码的整体结构很好,关于
'0'
0
之间差异的那一点虽然正确,但在这里并不相关。您是否意识到
0
值和
“0”
的内部表示之间的差异,即(与ASCII一样,在许多当前系统上都是如此)
48
?解决此类问题的正确工具是调试器。在询问堆栈溢出之前,应该逐行检查代码。如需更多帮助,请阅读。至少,您应该[编辑]您的问题,以包含一个重现您的问题的示例,以及您在调试器中所做的观察。@RadLexus-
“0”
是一个字符串文字,由两个字符组成
'0'
'\0'
@RadLexus-除了打字错误,您还有什么意思?代码不依赖于字符编码的细节;它构造一个字符串,并使用流提取器获取该字符串中的文本表示的数值。在这方面,代码很好。@ShadowLegend-这里有一些混乱;代码的整体结构很好,关于
'0'
0
之间的差异的观点虽然正确,但在这里并不相关。“当您使用Visual Studio时……”——事实上,当您使用任何编译器时,您都不能假设内置类型的自动变量将被初始化为0。@Zohou Zhi Hua,兄弟,谢谢你的回复,我尝试将变量初始化为0,正如你所说的,但是输出没有达到我的预期,当我输入1 2 3时,它输出01133@ShadowLegend您好,我已经修复了您的错误并编辑了我的答案,请查看。哦,我明白了,在循环解决问题后输出总和,谢谢,但是我很抱歉再次麻烦问一下它的背后是什么,如果我在循环中输出和,为什么它会输出许多数字?它应该像1,3,6那样输出,而不是长的无法识别的数字,对吗?如果你想输出1,3,6,那么你应该把你的
std::cout“当你在使用Visual Studio时……”——事实上,当你在使用任何编译器时,你都不能假设内置类型的自动变量将被初始化为0。@Zohou Zhi Hua,兄弟,谢谢你的回复,我尝试将变量初始化为0,正如你所说的,但是输出没有达到我的预期,当我输入1 2 3时,它输出01133@ShadowLegend您好,我已经修复了您的错误并编辑了我的答案,请查看。哦,我明白了,在循环解决问题后输出总和,谢谢,但是我很抱歉再次麻烦问一下它的背后是什么,如果我在循环中输出和,为什么它会输出许多数字?它应该像1、3、6那样输出,而不是长的无法识别的数字,对吗?如果