在C语言中从函数中获取数据以在另一个函数中使用它


typedef struct Projet
{
/* data */
char theme[20];
int diff;
char etudiant1[4]; //L'Etudiant 1 affecté dans le projet par Matricule
char etudiant2[4]; //L'Etudiant 2 affecté dans le projet par Matricule
}Projet;
/****---Function to add a project---****/
int AddProjet(int nmbProjet){

int rows;
Projet TabProj[nmbProjet]; // Table to store the projects
/* --Loop to get the project info-- */
for ( rows = 0; rows < nmbProjet; rows++)
{
printf("t--> Theme %d : ",rows+1);
scanf(" %s",&TabProj[rows].theme);
/****Project Theme****/
printf("t--> La difficulte [1-10] : ");
scanf(" %i",&TabProj[rows].diff);
/*****its difficulty*****/
printf("n");
}
}
/*****************************************/
/****---Function to add 2 students in a project---****/
int AffEtudiant(int nmbPrjAff){
int choix_prj_aff;
Projet TabProj[nmbPrjAff];//Table of the projects
puts("--> Choisir un projet :");//Choose a project

/***--Loop to list all the project that the user has added--***/
for (int i = 0; i < nmbPrjAff; i++)
{
printf("t%d- Projet %d :n",i+1,i+1);
printf("t -> %s",TabProj[i].theme);
printf("n");
printf("t -> %d",TabProj[i].diff);
printf("nn");
}
printf("--> Votre choix est : ");//Choice
scanf("%d",&choix_prj_aff);
printf("n<----------------------->nn");

printf("--> Entrer le Matricule de 1 etudiant : ");//Enter the code of student 1 
scanf("%s",&TabProj[choix_prj_aff-1].etudiant1);

printf("--> Entrer le Matricule de 2 etudiant : ");//Enter the code of student 2 
scanf("%s",&TabProj[choix_prj_aff-1].etudiant2);

printf("n<----------------------->nn");   
}
/*****************************************************/

问题是当我尝试添加项目后添加两个学生,第二个函数称为(AffEtudiant)无法获得项目数据(主题/难度)来列出它们。相反,它显示了一些垃圾值,即使我调用了我在添加项目(Project TabProj[])函数中设置的相同表;

我怎么能得到数据表使用它在另一个函数?

TabProj是每个函数内部的局部变量,一旦函数存在,它就会被释放。你应该在之外定义它当你想让函数更新它时,给函数传递一个指向它的点。

最新更新