我的代码需要一些帮助,我希望我的自动化函数在内存中保留其旧值,以便在研究所有条件后最终返回最终值。这是我的代码:
#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, ¶_1_courant, ¶_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/