大家好,我现在遇到的问题是当向结构体中插入新的朋友时不会报错但直接退出程序。看了半天不知道是什么原因导致的,麻烦会的朋友帮忙看看了,谢谢大家。
#include
#include
#include
typedef struct users{
int numoffriend;
char name[50];
char relation[50][100];
struct users* next;
}users;
struct users* headpointerglobal;
void insert(char name[50], int* numofuser,struct users** head){
struct users* cur_node;
struct users* pre_node;
struct users* new_node;
int volume = sizeof(struct users);
new_node = (struct users*)malloc(volume);
strcpy(new_node->name,name);
if(*head == NULL){
*head = new_node;
new_node->next = NULL;
(*numofuser)++;
}
else{
cur_node = *head;
pre_node = NULL;
int i =0;
while(cur_node != NULL && strcmp(name,cur_node->name)>0 && i <*numofuser){
pre_node = cur_node;
cur_node = cur_node->next;
i++;
}
new_node->next = cur_node;
if(pre_node == NULL){
*head = new_node;
}
else{
pre_node->next = new_node;
}
(*numofuser)++;
}
}
void delete(char name[50],int* numofuser,struct users** head){
struct users* pre_node = NULL;
struct users* cur_node = (struct users*)malloc(sizeof(struct users));
cur_node = *head;
if (strcmp(cur_node->name,name)==0){
*head = cur_node->next;
(*numofuser)--;
free(cur_node);
}
else{
while(cur_node!= NULL && strcmp(cur_node->name,name)!=0){
pre_node = cur_node;
cur_node = cur_node->next;
}
if(cur_node == NULL){
printf("user not found\n");
}
else{
pre_node->next = cur_node->next;
(*numofuser)--;
free(cur_node);
}
}
}
void relationship(char name[50],char friendname[50],struct users** head){
struct users* cur_node = *head;
int col = 0;
int i = 0;
int j = 0;
int result =0;
int row;
while(cur_node != NULL && strcmp(cur_node->name,name) != 0){
cur_node = cur_node->next;
}
printf("1\n");
if(cur_node ==NULL){
printf("user not found\n");
}
else{
if(cur_node->numoffriend == 0){
row = 0;
printf("1\n");
}
else{
row = (cur_node->numoffriend)-1;
for( i = 0;i<(cur_node->numoffriend);i++){
result = strcmp(cur_node->relation[i][j],friendname[j]);
}
}
}
printf("1\n");
if(result != 0){
while(friendname[col] != 0){
cur_node->relation[row][col] = friendname[col];
col++;
}
cur_node->numoffriend++;
printf("%s\n",cur_node->relation[row]);
}
else{
printf("Friend exist\n");
}
}
int savetofile(struct users** head){
int counter=0;
char username[50];
char friendname[50];
struct users* cur_node = *head;
int col =0;
FILE *fp = fopen("database.txt","w");
if(fp == NULL){
printf("Failed to open file\n");
return 1;
}
else{
while(cur_node != NULL){
strcpy(username,cur_node->name);
fputs(username,fp);
fputs("\n",fp);
if(cur_node->numoffriend != 0){
for(int j = 0;j<(cur_node->numoffriend);j++){
strcpy(friendname,cur_node->relation[j]);
fputs(friendname,fp);
if(j<(cur_node->numoffriend)-1){
fputs(";",fp);
}
}
}
cur_node = cur_node->next;
fputs("\n",fp);
}
}
fclose(fp);
}
int main(){
char username[50];
int choice;
int numberofuser = 0;
struct users* pointer = NULL;
headpointerglobal =NULL;
while(1){
printf("enter choice\n");
scanf("%d",&choice);
if(choice == 1){
printf("enter username\n");
scanf("%s",username);
insert(username,&numberofuser,&headpointerglobal);
printf("%d\n",numberofuser);
}
if(choice== 2){
pointer = headpointerglobal;
while(pointer != NULL){
printf("%s\n",pointer->name);
pointer = pointer->next;
}
}
if(choice == 3){
printf("enter username to remove\n");
scanf("%s",username);
delete(username,&numberofuser,&headpointerglobal);
printf("%d\n",numberofuser);
}
if(choice == 4){
char friendname[50];
printf("enter username to add friend\n");
scanf("%s",username);
printf("enter friends's name\n");
scanf("%s",friendname);
relationship(username,friendname,&headpointerglobal);
}
if(choice == 5){
savetofile(&headpointerglobal);
}
if(choice ==6){
break;
}
}
return 0;
}
到这,系统设置就行了,当然这是我自己的配置,仅供参考。
接下来就是注册表了,win键+R,输入regedit,
按下Enter键,确定。
这是中午想搞AppData文件夹时候的页面,刚好瞅见了Desktop桌面文件夹了,我个人是设置放在了D盘,主要是用来放置有时候一些临时要处理的文件,或者是临时安装包这些。关键的是它不会涉及到C盘,嘿嘿。
讲真,我是不推荐天天在自己电脑上瞎折腾,安装这安装那的,因为就算用一些软件可以很方便的清理注册表、或者缓存垃圾什么的,其实效果不是很好,
其实注册表还是有在的,还有那些空文件夹或者是删除残余。比如:
还有:
还有我有把默认安装文件夹修改到D盘,这样空间也省出一些
有的朋友可能会发现说怎么Common那三个文件夹没改,讲真我也不知道,那个时候我也没注意,有些人说改了会出问题,咱也没去实验。
你是怎么测试出来问题的,测试步骤可以描述下