错误导致代码执行

时间:2017-11-04 18:46:10

标签: c

我正在尝试用c代码创建一个程序,作为高中教育项目的一部分,我的打印结果有些麻烦。 主要想法是寻找连续的非方形自由数字团队的程序。该数量的数量取决于预处理器定义的参数K的值。 例如,如果定义的参数K设置为值2,则在检查2个连续的非方形空闲数后,程序应打印。检查没有上限数量。但是,我编写的代码仅对参数1成功。为了正常工作,我是否需要进行任何修正? 我已经制作了部分代码:

#include <stdio.h>
#include <stdlib.h>
/* Including the math library for sqrt function */
#include <math.h>
/* Testing Environment values */
#define K 2

int main (void) {
    // Declaration and appropriate Initialization of Variables Section
    unsigned int num = 0, last = 0, count = 0, i, j, lim, Div, temp, start, first, flag;
    long long int div;

    // Non-Squarefree number check section
    for (i = 1; count < K; i++) {
        flag = 0 ;

        for (j = 2; (j <= sqrt(i)) && (count < K); j++) {
            while (( (i % (j * j)) == 0) && (count < K) ) {
                flag = 1;

                if (count = 0) {
                    num = i; /* Storage of the first checked number in case of success finding the K requested numbers */
                }

                count++;
                printf("count++: %d \n", count);
                Div = j;
                last = i;   /* Storage of the last checked number that mets the requested critiria */
                printf("last: %d \n", last);
                break;
            }

            if (flag = 0) { /* Reinitialization of variable values in case of squarefree number */
                count = 0;
                printf("count_null: %d \n", count);
                num = 0;
                printf("count: %d \n", count);
                break;
            }

            break;
        }
    }

    /* test execution prints */
    printf("----------------------------------------") ;
    printf("K: %d \n", K) ;
    printf("last: %d \n", last) ;
    printf("num: %d \n", num);
    start = num;
    return 1;
}

1 个答案:

答案 0 :(得分:0)

看看这些文章,最重要的是你的if语句。

if (count = 0) {

    // Storage of the first checked number in case
    // of success finding the K requested numbers

    num = i;
}

if (flag = 0) {

    // Reinitialization of variable values in case
    // of squarefree number

    count = 0;
    printf("count_null: %d \n", count);
    num = 0;
    printf("count: %d \n", count);
    break;
}

这是开始使用C编程时的常见问题,这可能是您的代码无效的原因。比较运算符为==,而非=,因为它已用作赋值运算符。

这意味着如果if (count = 0)等于0,则count不会运行。首先,它将执行您在语句中放置的内容,即“将count设置为0”或{{ 1}}。然后,如果该操作返回1(true),则将执行if语句的内容。在我的系统上(Linux,GCC)count = 0总是返回0,但我没有检查它是否被定义为标准行为。这意味着count = 0 永远不会执行,只是通过它,如果它总是将num = i设置为0.这可能不是你想要的。与count相同。

我不知道代码应该做什么,也许这正是你想要做的。但即使你这样做,也不应该在if语句中设置变量。阅读和减慢你的速度令人困惑,并导致错误。如果你真的想要做你发布的代码所做的事情,它会是这样的:

if (flag = 0)

这就是您的代码所做的事情。但我99%肯定你不想要那个,所以首先要改变你的count = 0; if (0) { // 0 = false num = i; } 以使用if。如果能解决这个问题,请告诉我,如果还有其他问题无法解决,我们会解决它。希望有所帮助!