c - 在c编程中将值保存在内存中

标签 c

我的代码需要一些帮助,我希望我的自动化函数在内存中保留其旧值,以便在研究所有条件后最终返回最终值。这是我的代码:

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

//Prototypes
int automate(int tddv_estime, int tddv_worst, int para_1_courant, int para_2_courant, int para_1_max, int para_1_min, int para_2_max, int para_2_min);
int application(int para1_courant, int para_2_courant, int state);
int fct_test(int scenario_1[]);

/*-----------------------------------------------------------------------
Main()
-------------------------------------------------------------------------*/
int main()
{
    int scenario_1[7] = { 15, 20, 21, 22, 22, 20, 12 };
    fct_test(scenario_1);
    return 0;
}

/*-----------------------------------------------------------------------
FONCTION fct_test
-------------------------------------------------------------------------*/
int fct_test(int scenario_1[])
{
    int tddv_worst = 20;
    int para_1_min = 5;
    int para_1_max = 10;
    int para_2_min = 1;
    int para_2_max = 4;
    int para_1_courant = para_1_max;
    int para_2_courant = para_2_max;
    int tddv_estime;
    int tab_final_1[7] = { 0 };
    int tab_final_2[7] = { 0 };

    int i;

    for (i = 0; i<7; i++) //warning nombre elements scenario (ici 6) !
    {
        tddv_estime = scenario_1[i];
        automate(tddv_estime, tddv_worst, para_1_courant, para_2_courant, para_1_max, para_1_min, para_2_max, para_2_min);
        tab_final_1[i] = para_1_courant;
        tab_final_2[i] = para_2_courant;
        printf("%d\n", tab_final_1[i]);
        printf("%d\n", tab_final_2[i]);
    }
}

/*-----------------------------------------------------------------------
FONCTION automate
-------------------------------------------------------------------------*/

int automate(tddv_estime, tddv_worst, para_1_courant, para_2_courant, para_1_max, para_1_min, para_2_max, para_2_min)
{
    int state;

    if (tddv_estime < tddv_worst)
        state = 1; //Etat initial

    if (tddv_estime > tddv_worst)
        state = 2; //Decrement para1

    if (tddv_estime < tddv_worst && para_1_courant < para_1_max)
        state = 3; //Increment para1

    if (tddv_estime == tddv_worst)
        state = 4; //Etat Invariant 1

    if (tddv_estime > tddv_worst && para_1_courant <= para_1_min)
        state = 5; //Decrement para_2

    if (tddv_estime < tddv_worst && para_2_courant < para_2_max)
        state = 6; //Increment para2

    if (tddv_estime > tddv_worst && para_1_courant <= para_1_min && para_2_courant <= para_2_min)
        state = 8; //Etat radar sature


    switch (state) {
    case 1:
        printf("ETAT INITIAL\n");
        printf("Para_1_courant = %d\n", para_1_courant);
        printf("Para_2_courant = %d\n", para_2_courant);
        return para_1_courant;
        return para_2_courant;
        break;

    case 2:
        printf("\nDECREMENT PARA_1\n");
        para_1_courant--;
        printf("Para_1_courant = %d\n", para_1_courant);
        printf("Para_2_courant = %d\n", para_2_courant);
        return para_1_courant;
        return para_2_courant;
        break;

    case 3:
        printf("\nINCREMENT PARA_1\n");
        para_1_courant++;
        printf("Para_1_courant = %d\n", para_1_courant);
        printf("Para_2_courant = %d\n", para_2_courant);
        return para_1_courant;
        return para_2_courant;
        break;

    case 4:
        printf("\nETAT INVARIANT\n");
        printf("Para_1_courant = %d\n", para_1_courant);
        printf("Para_2_courant = %d\n", para_2_courant);
        return para_1_courant;
        return para_2_courant;
        break;

    case 5:
        printf("\nDECREMENT PARA_2\n");
        para_2_courant--;
        printf("Para_1_courant = %d\n", para_1_courant);
        printf("Para_2_courant = %d\n", para_2_courant);
        return para_1_courant;
        return para_2_courant;
        break;

    case 6:
        printf("\nINCREMENT PARA_2\n");
        para_2_courant++;
        printf("Para_1_courant = %d\n", para_1_courant);
        printf("Para_2_courant = %d\n", para_2_courant);
        return para_1_courant;
        return para_2_courant;
        break;

        /*case 7:
        return("ETAT INVARIANT 2\n");
        break;*/

    case 8:
        printf("\nERREUR : RADAR SATURE\n");
        return para_1_courant;
        return para_2_courant;
        break;

        while (state != 8)
            automate(tddv_estime, tddv_worst, para_1_courant, para_2_courant, para_1_max, para_1_min, para_2_max, para_2_min);

    }
}

当我运行我的代码时,它打印出良好的状态但不是正确的值,我总是得到 10 和 4,它们是初始值的最大值和最小值。 例如,当我得到递减状态时,我希望我的值被递减、打印,然后在下一个循环中重新使用。 谁能帮我解决这个问题?

最佳答案

根据要求,使用指针传递的示例(这只是一个简单的示例,我会留给您将其应用到您的问题中):

void function(int* a) { //Takes a pointer to an integer as a parameter.
     (*a)++; //Dereference the pointer and increment the value of the integer it points to
}

*a 访问a

指向的值

所以我们传递一个指向我们在 main 或其他地方定义的整数的指针,然后递增它指向的值。这样整数就不会超出范围(因为它是在 main 中分配的)并且现在存储新值。

您当然可以像处理任何其他类型一样将多个指针传递给一个函数。

编辑

要修改你的代码,它看起来像这样,但我劝你不要只是使用它,阅读一下指针和函数,你的代码中有双重返回语句 做你认为他们做的事。

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

//Prototypes
void automate(int tddv_estime, int tddv_worst, int* para_1_courant, int* para_2_courant, int para_1_max, int para_1_min, int para_2_max, int para_2_min);
void fct_test(int scenario_1[]);

/*-----------------------------------------------------------------------
Main()
-------------------------------------------------------------------------*/
int main()
{
    int scenario_1[7] = { 15, 20, 21, 22, 22, 20, 12 };
    fct_test(scenario_1);
    return 0;
}

/*-----------------------------------------------------------------------
FONCTION fct_test
-------------------------------------------------------------------------*/
void fct_test(int scenario_1[])
{
    int tddv_worst = 20;
    int para_1_min = 5;
    int para_1_max = 10;
    int para_2_min = 1;
    int para_2_max = 4;
    int para_1_courant = para_1_max;
    int para_2_courant = para_2_max;
    int tddv_estime;
    int tab_final_1[7] = { 0 };
    int tab_final_2[7] = { 0 };

    int i;

    for (i = 0; i<7; i++) //warning nombre elements scenario (ici 6) !
    {
        tddv_estime = scenario_1[i];
        automate(tddv_estime, tddv_worst, &para_1_courant, &para_2_courant, para_1_max, para_1_min, para_2_max, para_2_min);
        tab_final_1[i] = para_1_courant;
        tab_final_2[i] = para_2_courant;
        printf("%d\n", tab_final_1[i]);
        printf("%d\n", tab_final_2[i]);
    }
}

/*-----------------------------------------------------------------------
FONCTION automate
-------------------------------------------------------------------------*/

void automate(int tddv_estime, int tddv_worst, int* para_1_courant, int* para_2_courant, int para_1_max, int para_1_min, int para_2_max, int para_2_min)
{
    int state;

    if (tddv_estime < tddv_worst)
        state = 1; //Etat initial

    if (tddv_estime > tddv_worst)
        state = 2; //Decrement para1

    if (tddv_estime < tddv_worst && *para_1_courant < para_1_max)
        state = 3; //Increment para1

    if (tddv_estime == tddv_worst)
        state = 4; //Etat Invariant 1

    if (tddv_estime > tddv_worst && *para_1_courant <= para_1_min)
        state = 5; //Decrement para_2

    if (tddv_estime < tddv_worst && *para_2_courant < para_2_max)
        state = 6; //Increment para2

    if (tddv_estime > tddv_worst && *para_1_courant <= para_1_min && *para_2_courant <= para_2_min)
        state = 8; //Etat radar sature


    switch (state) {
    case 1:
        printf("ETAT INITIAL\n");
        printf("Para_1_courant = %d\n", *para_1_courant);
        printf("Para_2_courant = %d\n", *para_2_courant);

        break;

    case 2:
        printf("\nDECREMENT PARA_1\n");
        (*para_1_courant)--;
        printf("Para_1_courant = %d\n", *para_1_courant);
        printf("Para_2_courant = %d\n", *para_2_courant);

        break;

    case 3:
        printf("\nINCREMENT PARA_1\n");
        (*para_1_courant)++;
        printf("Para_1_courant = %d\n", *para_1_courant);
        printf("Para_2_courant = %d\n", *para_2_courant);

        break;

    case 4:
        printf("\nETAT INVARIANT\n");
        printf("Para_1_courant = %d\n", *para_1_courant);
        printf("Para_2_courant = %d\n", *para_2_courant);

        break;

    case 5:
        printf("\nDECREMENT PARA_2\n");
        (*para_2_courant)--;
        printf("Para_1_courant = %d\n", *para_1_courant);
        printf("Para_2_courant = %d\n", *para_2_courant);

        break;

    case 6:
        printf("\nINCREMENT PARA_2\n");
        (*para_2_courant)++;
        printf("Para_1_courant = %d\n", *para_1_courant);
        printf("Para_2_courant = %d\n", *para_2_courant);

        break;

        /*case 7:
        return("ETAT INVARIANT 2\n");
        break;*/

    case 8:
        printf("\nERREUR : RADAR SATURE\n");

        break;

        while (state != 8)
            automate(tddv_estime, tddv_worst, para_1_courant, para_2_courant, para_1_max, para_1_min, para_2_max, para_2_min);

    }
}

关于c - 在c编程中将值保存在内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51096438/

相关文章:

c - movaps 的操作数类型

c++ - 错误修复。 OpenGL、GLSL Sprite 网格渲染问题

c - 使用 cryptoapi CryptImportKey 导入公钥时出错

c - 在 C 语言中使用#pragma

C 数组提取

c - 如何在函数中填充结构体数组

c++ - 为什么 Win32 API 中不使用标准数据类型?

c - DSP 的快速二维卷积

仔细检查一下我的 C 代码有什么问题

比较 If 和 Else 上的两个函数