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那样输出,而不是长的无法识别的数字,对吗?如果