C语言 基本主菜单代码不起作用



所以我要做的是编写一个简单的程序,带有一个主菜单,用户可以在其中填写项目的详细信息,列出所有项目,删除选定的项目或退出程序。项目将保存在数组中。这些函数将使用结构。

我已经编写了一个编译良好的功能代码(我知道大声笑),但到目前为止,只有第 4 个选项"退出"有效。其他 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 Menun ========n");
printf("Please choose a function from below:n");
printf("1.New Projectn2.Deleten3.Listn4.Exitn");
scanf("%d", &choice);
    while ((choice != 1) && (choice != 2) && (choice != 3) && (choice != 4))
          {
           printf("You have chosen a wrong function, please use numbers 1-4:nn");
           printf("Main Menun ========n");
           printf("Please choose a function from below:n");
           printf("1.New Projectn2.Deleten3.Listn4.Exitn");
           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 Menun ========n");
            printf("Please choose a function from below:n");
            printf("1.New Projectn2.Deleten3.Listn4.Exitn");
            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 %dn",        &projects[i].identifier);
                    scanf("Name:%sn", &projects[i].customer.name);
                    scanf("Surname:%sn", &projects[i].customer.surname);
                    scanf("Give the date in dd/mm/yyyy! format :%cn", &projects[i].date);
                    scanf("Price:&fn", &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("%dn", 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:%dn", projects[k].identifier);
                    printf("Name:%sn", projects[k].customer.name);
                    printf("Surname:%sn",projects[k].customer.surname);
                    printf("Date:%sn", projects[k].date);
                    printf("Price:%dn", projects[k].price);
                    }
        }
 }        `

任何想法将不胜感激

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

再看一下函数newpdeleteplist不返回任何内容,如果你使用上面建议的赋值,这将导致问题。 您要么需要返回一个项目(并且分配就可以了),要么将其返回类型更改为void(并且不执行分配)。

这是一个工作示例。请仔细查看此内容,并让我们知道您学到了什么。

#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 Menun ========n");
    printf("Please choose a function from below:n");
    printf("1.New Projectn2.Deleten3.Listn4.Exitn");
    scanf("%d", &choice);
    while ((choice != 1) && (choice != 2) && (choice != 3) && (choice != 4))
    {
           printf("You have chosen a wrong function, please use numbers 1-4:nn");
           printf("Main Menun ========n");
           printf("Please choose a function from below:n");
           printf("1.New Projectn2.Deleten3.Listn4.Exitn");
           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 Menun ========n");
        printf("Please choose a function from below:n");
        printf("1.New Projectn2.Deleten3.Listn4.Exitn");
        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("%dn", 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:%dn", projects[k].identifier);
            printf("Name:%sn", projects[k].customer.name);
            printf("Surname:%sn",projects[k].customer.surname);
            printf("Date:%sn", projects[k].date);
            printf("Price:%fn", projects[k].price);
        }
    }
    return;
}

相关内容

  • 没有找到相关文章

最新更新