所以我要做的是编写一个带有主菜单的简单程序,用户可以在其中填写项目的详细信息,列出所有项目,删除所选项目或退出程序。项目将保存在一个数组中。这些函数将使用结构。
我已经编写了一个编译好的功能代码(我知道大不了)但到目前为止只有第四个选项“退出”有效。其他3个选择似乎不起作用。
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct fullname
{
char name[10];
char surname[10];
};
struct meletes
{
int identifier;
struct fullname customer;
char date[10];
float price;
};
void initialize(struct meletes projects[10]);
struct meletes newp(struct meletes projects[10]);
struct meletes list(struct meletes projects[10]);
struct meletes deletep(struct meletes projects[10]);
int main(void)
{
int choice,k;
struct meletes projects[10];
void initialize(struct meletes projects[10]);
printf("Main Menu\n ========\n");
printf("Please choose a function from below:\n");
printf("1.New Project\n2.Delete\n3.List\n4.Exit\n");
scanf("%d", &choice);
while ((choice != 1) && (choice != 2) && (choice != 3) && (choice != 4))
{
printf("You have chosen a wrong function, please use numbers 1-4:\n\n");
printf("Main Menu\n ========\n");
printf("Please choose a function from below:\n");
printf("1.New Project\n2.Delete\n3.List\n4.Exit\n");
scanf("%d", &choice);
}
while (choice != 4)
{
switch (choice) {
case 1:
{
struct meletes newp(struct meletes projects[10]);
}
case 2:
{
struct meletes deletep(struct meletes projects[10]);
}
case 3:
{
struct meletes list(struct meletes projects[10]);
}
}
printf("Main Menu\n ========\n");
printf("Please choose a function from below:\n");
printf("1.New Project\n2.Delete\n3.List\n4.Exit\n");
scanf("%d", &choice);
}
printf("Thank u.\n");
system("pause");
return 0;
}
void initialize(struct meletes projects[10])
{
int l;
for(l=0; l<10; l++)
{
projects[l].identifier = 00000;
projects[l].price = 0.00;
strcpy(projects[l].customer.name,"----------");
strcpy(projects[l].customer.surname,"----------");
strcpy(projects[l].date, "0/0/0");
}
}
struct meletes newp(struct meletes projects[10])
{
int i;
for(i=0; i<10; i++)
{
if (projects[i].identifier == 00000)
{
scanf("Please enter the project's identifier %d\n", &projects[i].identifier);
scanf("Name:%s\n", &projects[i].customer.name);
scanf("Surname:%s\n", &projects[i].customer.surname);
scanf("Give the date in dd/mm/yyyy! format :%c\n", &projects[i].date);
scanf("Price:&f\n", &projects[i].price);
}
break;
}
}
struct meletes deletep(struct meletes projects[10])
{
int j,id;
for (j=0; j<10; j++)
{
if (projects[j].identifier != 00000) //Emfanizei oles tis meletes pou den ine diegrammenes
{
printf("%d\n", projects[j].identifier);
}
}
scanf("\nPlease insert the identifier of the project u want to delete:%d", &id);
for(j=0; j<10; j++)
{
projects[j].identifier = 00000;
projects[j].price = 0.00;
strcpy(projects[j].customer.name,"----------");
strcpy(projects[j].customer.surname,"----------");
strcpy(projects[j].date, "0/0/0");
}
}
struct meletes list(struct meletes projects[10])
{
int k;
for(k=0; k<10; k++)
{
if (projects[k].identifier != 00000);
{
printf(" Project %d:", k);
printf("\nIdentifier:%d\n", projects[k].identifier);
printf("Name:%s\n", projects[k].customer.name);
printf("Surname:%s\n",projects[k].customer.surname);
printf("Date:%s\n", projects[k].date);
printf("Price:%d\n", projects[k].price);
}
}
} `
任何想法都会非常感激
答案 0 :(得分:2)
main
中的以下行声明了这些功能,但不调用 thyem
void initialize(struct meletes projects[10]);
struct meletes newp(struct meletes projects[10]);
struct meletes deletep(struct meletes projects[10]);
struct meletes list(struct meletes projects[10]);
您需要调用函数,如下所示:
initialize(projects);
newp(projects);
deletep(projects);
list(projects);
最后三个似乎也返回meletes
结构,你需要声明一个meletes
类型的新变量并在适当的时候使用它:
struct meletes proj = newp(projects);
// use proj as appropriate
第二眼看,函数newp
,deletep
和list
不会返回任何内容,如果您使用上述建议的作业,则会产生问题。您需要返回一个项目(并且分配可以正常)或将其返回类型更改为void
(并且不进行分配)。
答案 1 :(得分:1)
这是一个工作示例。请仔细看看,告诉我们您的学习内容。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
char name[10];
char surname[10];
}fullname;
typedef struct
{
int identifier;
fullname customer;
char date[10+1]; /* need a NULL */
float price;
}meletes;
void initialize(meletes *projects);
meletes *newp(meletes *projects);
void list(meletes *projects);
void deletep(meletes *projects);
int main(int argc, char *argv[])
{
int choice,k;
meletes projects[10];
meletes *retMeletes;
initialize(projects);
printf("Main Menu\n ========\n");
printf("Please choose a function from below:\n");
printf("1.New Project\n2.Delete\n3.List\n4.Exit\n");
scanf("%d", &choice);
while ((choice != 1) && (choice != 2) && (choice != 3) && (choice != 4))
{
printf("You have chosen a wrong function, please use numbers 1-4:\n\n");
printf("Main Menu\n ========\n");
printf("Please choose a function from below:\n");
printf("1.New Project\n2.Delete\n3.List\n4.Exit\n");
scanf("%d", &choice);
}
while (choice != 4)
{
switch (choice)
{
case 1:
retMeletes = newp( projects);
break;
case 2:
deletep(projects);
break;
case 3:
list(projects);
break;
}
printf("Main Menu\n ========\n");
printf("Please choose a function from below:\n");
printf("1.New Project\n2.Delete\n3.List\n4.Exit\n");
scanf("%d", &choice);
}
printf("Thank u.\n");
system("pause");
return 0;
}
void initialize(meletes *projects)
{
int l;
for(l=0; l<10; l++)
{
projects[l].identifier = 00000;
projects[l].price = 0.00;
strcpy(projects[l].customer.name,"----------");
strcpy(projects[l].customer.surname,"----------");
strcpy(projects[l].date, "00/00/0000");
}
}
meletes *newp(meletes *projects)
{
int i;
for(i=0; i<10; i++)
{
if (projects[i].identifier == 0)
{
printf("Please enter the project's identifier: ");
scanf("%d", &projects[i].identifier);
printf("Name: ");
scanf("%s", &projects[i].customer.name);
printf("Surname: ");
scanf("%s", &projects[i].customer.surname);
printf("Give the date in dd/mm/yyyy! format: ");
memset( &projects[i].date, 0x00, sizeof( projects[i].date ));
scanf("%s", &projects[i].date );
printf("Price: ");
scanf("%f", &projects[i].price);
break;
}
}
return( &projects[i] );
}
void deletep(meletes *projects)
{
int j,id;
for (j=0; j<10; j++)
{
if (projects[j].identifier != 0) //Emfanizei oles tis meletes pou den ine diegrammenes
{
printf("%d\n", projects[j].identifier);
}
}
printf("\nPlease insert the identifier of the project u want to delete: ");
scanf("%d", &id);
projects[id-1].identifier = 0;
projects[id-1].price = 0.00;
strcpy(projects[id-1].customer.name,"----------");
strcpy(projects[id-1].customer.surname,"----------");
strcpy(projects[id-1].date, "0/0/0");
return;
}
void list(meletes *projects)
{
int k;
for(k=0; k<10; k++)
{
if (projects[k].identifier != 00000);
{
printf(" Project %d:", k);
printf("\nIdentifier:%d\n", projects[k].identifier);
printf("Name:%s\n", projects[k].customer.name);
printf("Surname:%s\n",projects[k].customer.surname);
printf("Date:%s\n", projects[k].date);
printf("Price:%f\n", projects[k].price);
}
}
return;
}