C程序在For循环中崩溃

时间:2016-09-27 18:12:12

标签: c crash

我是C编程的新手(我有一些基于vb.NET编程的基本经验),我试图为Project Euler Problem#1编写一个程序。 https://projecteuler.net/problem=1

算法

挑战要求程序员找到低于1000的3或5(含)的所有倍数的总和(我使用intInput来允许用户输入一个整数代替1000)。

我的当前解决方案接受输入,并将其递减1直到(intInput - n)%3 = 0,即,直到找到输入整数下的下一个最接近的3的倍数。

程序然后循环遍历从1到((intInput - n)/ 3)的所有整数,将每个整数添加到前一个整数的总和,只要当前整数不是5的倍数,在这种情况下,它被跳过了。

然后将得到的和存储在intThreeMultiplier中。

然后重复上面的过程,使用5代替3,在intInput下找到5的最大倍数,然后循环遍历整数1到((intInput - n)/ 5),而不是这次跳过3的倍数,并将总和存储在intFiveMultiplier中。

然后通过sum =(3 * intThreeMultiplier)+(5 * intFiveMultiplier)计算输出和。

问题

每当我编译并运行我的代码时,允许用户输入一个整数,然后程序崩溃。我已经确定原因与第一个For循环有关,但我无法弄清楚它是什么。

我已经在违规代码片段之后注释了所有内容。

源代码:

#include <stdio.h>
#include <stdlib.h>

void main()
{
    int intInput = 0;   /*Holds the target number (1000 in the challenge statement.)*/
    int n = 0;
    int count = 0;
    int intThreeMultiplier = 1;
    int intFiveMultiplier = 1;

    printf("Please enter a positive integer.\n");
    scanf("%d",intInput);

    for( ; (((intInput - n) % 3) != 0) ; n++)  
        {}

    /*for(; count <= ((intInput - n) / 3); count++)
        {
            if ((count % 5) != 0)
            {
                intThreeMultiplier += count;
            }
        }

    count = 0;
    for(n = 0 ; ((intInput - n) % 5) != 0 ; n++)
    {}

    for(; count <= ((intInput - n) / 5) ; count++)
    {
        intFiveMultiplier += count;
    }

    int sum = (3 * intThreeMultiplier) + (5 * intFiveMultiplier);
    printf("The sume of all multiples of 3 or 5 (inclusively) under %d is %d.",intInput, sum);*/
}

这是我第一次在StackOverflow上发帖,所以如果我违反任何提出问题的规则,我会提前道歉,并希望得到有关此问题的任何反馈。

此外,我对编码实践的任何建议或我用C做过的任何新手错误都非常开放。

谢谢!

2 个答案:

答案 0 :(得分:1)

scanf("%d",intInput);

可能是

scanf("%d", &intInput);  // note the ampersand

scanf需要地址是要存储内容的变量。 Why scanf must take the address of operator

仅用于调试,打印输入以验证输入是否正确接受,如

printf("intInput = %d\n", intInput);

答案 1 :(得分:0)

输入intInput时首先需要使用:

 scanf("%d", &intInput);    

因为scanf()需要作为指向变量的指针的参数。你这样做是通过把&amp;在你的int之前签名。

另外我认为你应该仔细检查你的算法,因为你不止一次总结了一些数字。 :)