Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我需要我的程序说;此值无效";_C++ - Fatal编程技术网

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 ....