有没有大佬帮孩子看一下,在主函数free(a)前面的那个printf为什么会打印出两次
本帖最后由 zwj.123 于 2022-11-26 18:06 编辑#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#pragma pack(1)
typedef struct Link{
int id;
char name;
char gender;
char role;
int age;
char skill;
}Node;
void _input(Node *,int n);
Node* _add(Node *,int n,int *);
void _print(Node a[],int n);
void _alter(Node *);
Node * _delete(Node *,int n);
void _quit();
int main()
{
int i=0,n=0,m=0;
int *p = &m;
char order;
Node *a;
printf("Now you can do these things\n");
printf("if you want to add ,input the order :a\n");
printf("if you want to look,input the order :l\n");
printf("if you want to alter,input the order:e\n");
printf("if you want to delete,input the order :d\n");
printf("if you want to quit,input the order :q\n");
order=getchar();
begin:
switch(order)
{
case 'a': a= _add(a,n,p); break;
case 'l': n=n+*p;_print(a,n);break;
case 'e': _alter(a); break;
case 'd':a= _delete(a,n); break;
case 'q': _quit(); break;
default : printf("you enter the wrong order\n");break;
}
if(order!='q')
{
printf("You not input the q,so enter the order again:\n");//第一次提问,有很多不会,如果做的不好希望见谅,抱歉,
fflush(stdin);
order=getchar();
fflush(stdin);
goto begin;
}
free(a);
return 0;
}
Node * _add(Node *a,int n,int *p)
{
int i;
printf("how much do you want to add? Please input the number:\n");
scanf("%d",p);
Node * b=(Node*)malloc((*p+n)*sizeof(Node));
for(i=0;i<n;i++)
{
b.id=a.id;
b.age=a.age;
strcpy(b.name,a.name);
strcpy(b.gender,a.gender);
strcpy(b.skill,a.skill);
}
printf("Please input the people's information again\n");
printf("including id,name,gender,role,age,skill\n");
for(i=n;i<*p+n;i++)
{
scanf("%d %s %s %s %d %s",&b.id,b.name,b.gender,b.role,&b.age,b.skill);
}
return b;
}
} order=getchar(); // 你输入1个字符,其实有2个,(1个可见字符,1个回车)
getchar(); // 加getchar() 吃掉回车 ba21 发表于 2022-11-26 18:25
order=getchar(); // 你输入1个字符,其实有2个,(1个可见字符,1个回车)
getchar(); // 加getchar() 吃 ...
我试试,哈哈 ba21 发表于 2022-11-26 18:25
order=getchar(); // 你输入1个字符,其实有2个,(1个可见字符,1个回车)
getchar(); // 加getchar() 吃 ...
请问下用scanf可行吗,我试了试还是老样子 zwj.123 发表于 2022-11-26 18:32
请问下用scanf可行吗,我试了试还是老样子
你不看看你有几个地方使用了getchar() ba21 发表于 2022-11-26 18:38
你不看看你有几个地方使用了getchar()
我把全部getchar 改成了scanf发现没有变化,然后我在出问题的句子后面加上了getchar(),发现问题解决了,这就令我疑惑的是scanf它也接受前面留下的回车吗? 本帖最后由 zwj.123 于 2022-11-26 18:59 编辑
ba21 发表于 2022-11-26 18:38
你不看看你有几个地方使用了getchar()
噢噢,知道错误了捏,谢谢{:5_109:}麻烦您了
页:
[1]