gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:54:34 24 4
gpt4 key购买 nike

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

#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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com