怎么简单一点,不用那个 是否继续填写
本帖最后由 叶落了 于 2023-6-9 21:31 编辑#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//函数声明
void input(struct Things *a);
void lookfor(struct Things *a,char date);
void print(struct Things *a);
struct Things
{
char date;
char effort;
struct Things *next;
};
void input(struct Things *a)
{
char i;
printf("添加记录(Y/N):");
scanf("%c",&i);
getchar();
if(i=='Y')
{
a->next=NULL;
a->next=(struct Things *)malloc(sizeof(struct Things));
printf("日期(yy-mm-dd):");
scanf("%s",a->date );
getchar();
printf("事件:");
scanf("%s",a->effort );
getchar();
printf("是否继续填写(Y/N):");
/*分配下一个节点的空间,之所以这样做是因为这个节点已完成赋值了。
如果直接是return input(a->next);
我的判断语句只会将一个没有赋值的节点当成最后的最后的节点,然后打印的就是一串乱码
*/
scanf("%c",&i);
getchar();
if(i=='Y')
{
return input(a->next);
}
else
{
a->next=NULL;
return;
}
}
}
void lookfor(struct Things *a,char date)
{
if(strcmp(a->date,date)==0)
{
printf("已找到该日的事件...\n");
printf("%s\n",a->date );
printf("%s\n",a->effort);
return;
}
else if(a->date!=NULL)
{
return lookfor(a->next,date);
}
else if(a->date==NULL)
{
printf("搜索完毕,无该日日期。\n");
return;
}
}
void print(struct Things *a)
{
if(a==NULL)
{
return;
}
else
{
printf("日期%s\n",a->date );
printf("事件%s\n",a->effort);
return print(a->next);
}
}
int main(void)
{
struct Things *things=NULL;
things=(struct Things *)malloc(sizeof(struct Things));
char date;
printf("====录入功能测试====\n");
input(things);
putchar('\n');
printf("====查找功能测试====\n");
printf("请输入日期:");
scanf("%s",date);
getchar();
lookfor(things,date);
printf("====打印功能测试====\n");
{
print(things);
}
return 0;
} 这段代码实现了一个日记记录系统,但每次输入一个新的事件后,都会询问用户是否继续填写。如果你希望简化这个过程,只需要移除相关的询问部分。以下是修改后的代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//函数声明
void input(struct Things *a);
void lookfor(struct Things *a,char date);
void print(struct Things *a);
struct Things
{
char date;
char effort;
struct Things *next;
};
void input(struct Things *a)
{
a->next=NULL;
a->next=(struct Things *)malloc(sizeof(struct Things));
printf("日期(yy-mm-dd):");
scanf("%s",a->date );
getchar();
printf("事件:");
scanf("%s",a->effort );
getchar();
//分配下一个节点的空间,之所以这样做是因为这个节点已完成赋值了。
//我的判断语句只会将一个没有赋值的节点当成最后的最后的节点,然后打印的就是一串乱码
a->next=NULL;
}
void lookfor(struct Things *a,char date)
{
if(strcmp(a->date,date)==0)
{
printf("已找到该日的事件...\n");
printf("%s\n",a->date );
printf("%s\n",a->effort);
return;
}
else if(a->date!=NULL)
{
return lookfor(a->next,date);
}
else if(a->date==NULL)
{
printf("搜索完毕,无该日日期。\n");
return;
}
}
void print(struct Things *a)
{
if(a==NULL)
{
return;
}
else
{
printf("日期%s\n",a->date );
printf("事件%s\n",a->effort);
return print(a->next);
}
}
int main(void)
{
struct Things *things=NULL;
things=(struct Things *)malloc(sizeof(struct Things));
char date;
printf("====录入功能测试====\n");
input(things);
putchar('\n');
printf("====查找功能测试====\n");
printf("请输入日期:");
scanf("%s",date);
getchar();
lookfor(things,date);
printf("====打印功能测试====\n");
{
print(things);
}
return 0;
}
这段代码将会创建一个事件,然后直接结束。如果你希望循环创建事件,可以考虑添加一个循环结构,例如 while 或 for 循环。 可以修改代码,把判断是否继续填写的部分去掉,改成一个死循环,在合适的时候使用 break 退出循环即可。下面是修改后的代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//函数声明
void input(struct Things *a);
void lookfor(struct Things *a,char date);
void print(struct Things *a);
struct Things
{
char date;
char effort;
struct Things *next;
};
void input(struct Things *a)
{
char i;
printf("添加记录(Y/N):");
scanf("%c",&i);
getchar();
while(i == 'Y')
{
a->next = NULL;
a->next = (struct Things *)malloc(sizeof(struct Things));
printf("日期(yy-mm-dd):");
scanf("%s",a->date );
getchar();
printf("事件:");
scanf("%s",a->effort );
getchar();
printf("是否继续填写(Y/N):");
scanf("%c",&i);
getchar();
}
}
void lookfor(struct Things *a,char date)
{
if(strcmp(a->date,date)==0)
{
printf("已找到该日的事件...\n");
printf("%s\n",a->date );
printf("%s\n",a->effort);
return;
}
else if(a->date!=NULL)
{
return lookfor(a->next,date);
}
else if(a->date==NULL)
{
printf("搜索完毕,无该日日期。\n");
return;
}
}
void print(struct Things *a)
{
if(a==NULL)
{
return;
}
else
{
printf("日期%s\n",a->date );
printf("事件%s\n",a->effort );
return print(a->next);
}
}
int main(void)
{
struct Things *things=NULL;
things=(struct Things *)malloc(sizeof(struct Things));
char date;
printf("====录入功能测试====\n");
input(things);
putchar('\n');
printf("====查找功能测试====\n");
printf("请输入日期:");
scanf("%s",date);
getchar();
lookfor(things,date);
printf("====打印功能测试====\n");
{
print(things);
}
return 0;
}
页:
[1]