C++ 我需要我的程序说;此值无效";
这是我工作中的问题 三角形数序列是通过添加自然数生成的。因此,第七个三角形编号将为C++ 我需要我的程序说;此值无效";,c++,C++,这是我工作中的问题 三角形数序列是通过添加自然数生成的。因此,第七个三角形编号将为1+2+3+4+5+6+7=28。前十个术语是:1,3,6,10,15,21,28,36,45,55, 让我们列出前七个三角形数字的系数: 1: 1 3: 1,3 6: 1,2,3,6 10: 1,2,5,10 15: 1,3,5,15 21: 1,3,7,21 28: 1,2,4,7,14,28 我们可以看到28是第一个有超过五个除数的三角形数。第一个除数超过100的三角形数的值是多少 这是我的密码
1+2+3+4+5+6+7=28
。前十个术语是:1,3,6,10,15,21,28,36,45,55,
让我们列出前七个三角形数字的系数:
1: 1
3: 1,3
6: 1,2,3,6
10: 1,2,5,10
15: 1,3,5,15
21: 1,3,7,21
28: 1,2,4,7,14,28
我们可以看到28是第一个有超过五个除数的三角形数。第一个除数超过100的三角形数的值是多少
这是我的密码。我在错误处理方面遇到问题。唯一有效的输入是数字。如果我输入的不是一个数字,我希望它回答“错误”或类似的东西
int main()
{
int div=0,sum=0,num,i=1,count=0,a;
cout<<"Enter the number of divisors"<< endl;
cin>>a;
while(div<=a) {
div=0;
sum=sum+i;
for(int j=1;j<=sum;j++)
if (sum%j==0)
div++;
chk++;
i++;
}
cout<<"Value of first triangle number is "<<sum<<endl;
cout<<"Value of triangle number is "<<count<<endl;
return 0;
}
intmain()
{
int div=0,sum=0,num,i=1,count=0,a;
cout检查输入和转换是否成功的最简单方法是检查流是否仍然良好:
if (std::cin >> a) {
// Success
} else {
// Failure
}
如果要恢复并重试,则需要在重试之前清除流的状态,并删除错误的输入,例如
std::cin.clear();
std::cin.ignore(unsigned(-1), '\n');
intmain()
{
int div=0,sum=0,num,i=1,count=0,a;
对于(;;){
cout>a){
打破
}否则{
试试这个:
int a = 0;
std::string line;
while(std::getline(std::cin, line) && sscanf(line.c_str(), "%d", &a) != 1)
{
puts("Error goes here");
}
//the rest code goes here ....
我注意到您没有错误处理。如何检测错误?这需要是实际逻辑的一部分。@arafangion,是的。wic是我需要的帮助。在维护同一代码时,我如何对此进行错误处理。我只想添加它。旁注:即使您不严格需要大括号,也要使用大括号。这通常是一个好习惯o提前获取。你应该搜索之前的问题,看看你的问题是否已经得到了回答。这似乎回答了你的问题:特别是,列表中的第一项。它不仅看起来很相似。你的代码与其他人的答案完全相同,但你将chk
的声明更改为count
而不修复循环中的chk++
。你是剽窃了它们还是反过来了?是否将其插入“for(;)”中这个问题是一个家庭作业问题。如果我在任何一个作业中都有这样的C++和C函数,我会被标记下来。也许替换<代码> PUT/<代码>调用<代码> CURR @克里斯顿,然后像迈克建议的那样。重建一个sSCANF不是一个好主意。没有比你的代码更紧凑的方法。(我个人并不反对你的代码)。但是你可以通过三个步骤来完成:获取下一个令牌(getline
),验证令牌(循环令牌并检查非字母字符),然后将令牌转换为整数值(stringstream
)。也就是说,OP可能被允许使用C,在这种情况下,我会使用你的代码,因为它涉及更少的编写,效率更高。@ChrisParton我要告诉你。我的观点是,重建sscanf是一项繁重的任务,需要考虑符号、十六进制、oct和区域设置信息,比如0xff12是整数的有效输入。我不会争辩w哈哈。如果不考虑不同的地区,那就够糟糕的了。
int a = 0;
std::string line;
while(std::getline(std::cin, line) && sscanf(line.c_str(), "%d", &a) != 1)
{
puts("Error goes here");
}
//the rest code goes here ....