zwj.123 发表于 2022-11-26 18:01:35

有没有大佬帮孩子看一下,在主函数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;
}




}

ba21 发表于 2022-11-26 18:25:03

order=getchar(); // 你输入1个字符,其实有2个,(1个可见字符,1个回车)
getchar(); // 加getchar() 吃掉回车

zwj.123 发表于 2022-11-26 18:29:27

ba21 发表于 2022-11-26 18:25
order=getchar(); // 你输入1个字符,其实有2个,(1个可见字符,1个回车)
getchar(); // 加getchar() 吃 ...

我试试,哈哈

zwj.123 发表于 2022-11-26 18:32:39

ba21 发表于 2022-11-26 18:25
order=getchar(); // 你输入1个字符,其实有2个,(1个可见字符,1个回车)
getchar(); // 加getchar() 吃 ...

请问下用scanf可行吗,我试了试还是老样子

ba21 发表于 2022-11-26 18:38:29

zwj.123 发表于 2022-11-26 18:32
请问下用scanf可行吗,我试了试还是老样子

你不看看你有几个地方使用了getchar()

zwj.123 发表于 2022-11-26 18:43:11

ba21 发表于 2022-11-26 18:38
你不看看你有几个地方使用了getchar()

我把全部getchar 改成了scanf发现没有变化,然后我在出问题的句子后面加上了getchar(),发现问题解决了,这就令我疑惑的是scanf它也接受前面留下的回车吗?

zwj.123 发表于 2022-11-26 18:58:27

本帖最后由 zwj.123 于 2022-11-26 18:59 编辑

ba21 发表于 2022-11-26 18:38
你不看看你有几个地方使用了getchar()

噢噢,知道错误了捏,谢谢{:5_109:}麻烦您了
页: [1]
查看完整版本: 有没有大佬帮孩子看一下,在主函数free(a)前面的那个printf为什么会打印出两次