- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
首先,对不起我的英语。
对于一个项目,我必须制作一个车库管理程序。有一个机械师的链接列表。我现在制作了这个函数:一个用于在此列表中添加机制(addMec),一个用于删除机制(remMec)。
这是 addMec 函数:
void addMec(mechanics* first)
{
mechanics *new = malloc(sizeof(mechanic));
int speciality();
if(first==NULL)
{
return(0);
} else
{
printf("Add mechanic : \n");
// Ask for needed informations.
printf("Employee-Number : ");
scanf("%5d",&new->number);
printf("\nName : ");
scanf("%s",&new->name);
printf("\nFirst Name : ");
scanf("%s",&new->first_name);
new->speciality = speciality();
// Add to end -> new->next = NULL
new->next = NULL;
printf("%d %s %s %d\n",new->number,
new->name, new->first_name, new->speciality);
mechanics *current = first;
while(current->next!=NULL)
{
current = current->next;
}
current->next = new;
}
}
此函数不会在列表中添加任何内容。如果我尝试调试程序,我会收到一条 SIGSEGV 消息。
函数remMec
int remMec(mechanics* first)
{
int numrem, ret = 0;
mechanics *current, *intercale;
printf("Supprimer l'employe numero : ");
scanf("%5d",&numrem);
// On parcoure la liste à la recherche du numero d'employe.
current = first;
while(current->next != NULL)
{
// Nécéssaire si l'élément à supprimer est le premier de la liste.
if(current->number == first->number)
{
if(current->number == numrem && current != NULL)
{
intercale = first;
first = first->next;
free(intercale);
ret = 1;
}
}
if(current->number == numrem)
{
intercale = current->next;
current->next = intercale->next;
free(intercale);
ret = 1;
}
current = current->next;
}
if(ret)
{
return 1;
} else
{
return 0;
}
}
此函数的问题是它删除了搜索元素的下一个元素。示例:在列表中:15264 约翰·克里斯 112569 克里斯·约翰 2如果我尝试删除约翰·克里斯,它也会删除克里斯·约翰
这是结构:
typedef struct{
char name[31],first_name[31];
int speciality, number;
struct mechanic *next;
}mechanic;
编辑:当我尝试显示列表时,似乎发生了 SIGSEGV。这是该函数:
void displayList(mechanic *first, int n)
{
int i;
mechanic *courant = malloc(sizeof(mechanic));
current = first;
printf("Mechanics :\n");
for(i = 1; i<n; i++)
{
printf("%5d %s %s",current->number,current->name, current->first_name);
switch(current->speciality)
{
case 1: printf(" Wheels\n");break;
case 2: printf(" Motor\n");break;
case 3: printf(" Carrosserie\n");break;
case 4: printf(" Chassis\n");break;
default: printf(" Maintenance\n");break;
}
current = current->next;
}
}
主要:
int main()
{
int nbMec = 1,i,choise;
int menu();
int remMec(mechanics*);
void afficherListe(mechanics*, int);
void addMec(mechanics*);
mechanics *first, *current, *nextM;
first = malloc(sizeof(mechanics));
current = first;
FILE *fdat, *fdat2;
fdat = fopen("clients.dat","r");
fdat2 = fopen("employe.dat","r");
// Lecture du fichier contenant les mécaniciens
fscanf(fdat2,"%5d",¤t->number);
while(!feof(fdat2))
{
fscanf(fdat2,"%s%s%1d",¤t->name, ¤t->first_name, ¤t->speciality);
nextM = malloc(sizeof(mechanics));
current->next = nextM;
nbMec++;
current = nextM;
fscanf(fdat2,"%5d",¤tM->number);
}
//Finir la liste avec NULL
current = first;
for(i = 1; i<nbMec; i++){
current = current->next;
}
current->next = NULL;
free(nextM);
DisplayList(first,nbMec);
// Redirection en fonction du choix dans le menu
choise = menu();
if(choise == 1)
{
// Ajout d'un mécano
addMec(first);
nbMec++;
displayList(first,nbMec);
} else if (choise == 2)
{
if(remMec(first))
{
printf("Mecanicien efface de la liste.\n");
nbMec--;
} else
{
printf("Impossible.\n");
}
afficherListe(first,nbMec);
} else
{
//Ajout d'un rendez-vous
}
return 0;
}
这是员工.dat 文件:
12345 Ric Hochet 1
13456 Jean Valjean 2
14567 Rick Grimes 3
15007 James Bond 4
16789 Rogge Jacquie 5
记录示例:
XXXXX CCCCC CCCCC X
number name first_name speciality
你能帮我吗?谢谢!
最佳答案
我找到了解决方案:关于 addMec,感谢 CiaPan。在这些问题之后,我选择在列表的开头添加一个新机制。我还创建了一个列表结构,其中包含第一个元素。这是正确的 addMec(请注意,对于该项目,我添加了一个代表(修复)数组)。:
void addMec(list *list, int number, char name[], char first_name[], int speciality)
{
int i;
mechanics *new = malloc(sizeof(mechanics));
if(list == NULL || new == NULL)
{
exit(EXIT_FAILURE);
}
new->number = number;
strcpy(new->name,name);
strcpy(new->first_name,first_name);
new->speciality = speciality;
for(i = 1; i<=50; i++)
{
new->rep->year=0;
new->rep->day = 0;
new->rep->month = 0;
new->rep->price = 0;
new->rep->emergency = 0;
strcpy(new->rep->brkdwn,"");
}
new->next = list->first;
list->first = new;
list->nbElmt++;
}
关于 remMec,我在其他网站上搜索,一位名叫 pagrette 的用户向我解释了。有了这些行,
intercale = current->next;
current->next = intercale->next;
free(intercale);
我刚刚释放了下一个元素谢谢您的帮助!
关于c - 链表: Adding and removing issues,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41224361/
我不知道我做了什么来破坏我的 QtCreator,但是“突然”我所有的编译器问题(警告/错误)不再显示在问题面板中,而是只显示在“编译输出”面板中(我在那里不能使用它们通过单击跳转到错误代码)。 在“
我正在制作游戏作为自学。 我的目标是在鼠标指针后面有一条轨迹。(这有效)但是,当我在 chrome 上打开并运行它时。在达到一定的高度和宽度后,轨迹保留在 Canvas 上而不是被擦掉。谁能帮我解决这
我希望通过在我的HTML文件中适当地格式化我的网站上的文本来增强它的外观。具体地说,我希望确保我的HTML文件中的代码在网站上显示得很好。此外,我正在寻求帮助实现我的网站导航栏。,我希望和其他内容显示
我希望通过在我的HTML文件中适当地格式化我的网站上的文本来增强它的外观。具体地说,我希望确保我的HTML文件中的代码在网站上显示得很好。此外,我正在寻求帮助实现我的网站导航栏。,我希望和其他内容显示
我希望通过在我的HTML文件中适当地格式化我的网站上的文本来增强它的外观。具体地说,我希望确保我的HTML文件中的代码在网站上显示得很好。此外,我正在寻求帮助实现我的网站导航栏。,我希望和其他内容显示
我一直在尝试将背景图像添加到 html 文档中元素的边框: 你可以在这里看到:HTML: Something CSS: a { border-width:10px; border-co
我即将开始一个连接两个程序的项目,一个用c#,一个用c++。我已经有一个可以工作的 c# 程序,它能够与自身的其他版本对话。在开始使用c++版本之前,我想到了一些问题: 1) 我正在使用 protob
我正在尝试线程优先级的影响,当 run 方法中的 println 保留在注释中时,两个线程同时结束,我不理解这种行为,你能解释一下吗?谢谢。 主类 public class Main { public
jQuery 1.4: $('#menu li:last:not(.ignore)').addClass('last'); HTML: item 1 ite
当我创建或查看问题时,我想从Mantis问题跟踪系统中删除选择配置文件及其所有随附字段,因为这些问题与我要创建的任何问题都不相关。 其中包括配置文件部分随附的“平台”,“操作系统”和“操作系统版本”字
我不在Master分支上工作。我正在开发另一种newFeature,该功能也发布在github上。 我知道在处理Master分支时如何解决问题:Closes #XXX。 但是,这仅在我在Master分
我需要在一些UICollectionViewCell中画一个圆圈。具有不同颜色边框和背景颜色的圆圈。我的代码。 UICollectionViewController - (UICollectionVi
我们将Trac用于我正在从事的开源项目。我想将所有公开票导出到Github的Issues。我已经找到了一些可能的小型脚本,但是我想知道是否有人这样做并提出了建议。 理想情况下,它将trac的描述语法转
我对 iOS 编程还比较陌生,但在其他语言(主要是 C# 和 Java)方面拥有丰富的编程经验。 我正在尝试为 iPad 设备的某些产品制作一个类似图片库的东西,其中包含指定的类别。用户界面非常简单,
我已经在中间人中激活了 I18n,如下所示: activate :i18n, mount_at_root: :de 现在我想自动从 / 重定向到 /de。这可能吗? 另外,我想知道为什么中间人使用 p
我已经成功编写了一个程序,可以从 Excel 文件中读取数据并将它们存储在 mysql 的表中。我的程序读取每个文件的第一行,创建表的字段,并将其余数据存储为每列中的值。正是因为这种情况以编程方式发生
这是我的代码。 function m1() { return new Promise(function(resolve, reject) { var files = $('#aws-upl
谁能告诉我这是怎么回事? #include #include #include #include #include class writeManager { std::vector
compile 'com.github.RogaLabs:social-login:1.2.1' compile 'com.github.mukeshsolanki:social-login-help
我有一个巨大的 csv 文件,其中包含 149 列 和 25K+ 行,可以在 MySQL 中上传该文件> 我正在使用MySQL LOAD DATA 查询 表我的查询是: LOAD DATA local
我是一名优秀的程序员,十分优秀!