鱼C论坛

 找回密码
 立即注册
查看: 2463|回复: 6

[已解决]有没有大佬帮孩子看一下,在主函数free(a)前面的那个printf为什么会打印出两次

[复制链接]
发表于 2022-11-26 18:01:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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[30];
   char gender[20];
   char role[50];
   int age;
   char skill[50];

}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[i].id=a[i].id;
    b[i].age=a[i].age;
    strcpy(b[i].name,a[i].name);
    strcpy(b[i].gender,a[i].gender);
    strcpy(b[i].skill,a[i].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[i].id,b[i].name,b[i].gender,b[i].role,&b[i].age,b[i].skill);
    }
   
return b;
}




}
最佳答案
2022-11-26 18:25:03
order=getchar(); // 你输入1个字符,其实有2个,(1个可见字符,1个回车)
getchar(); // 加getchar() 吃掉回车
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-11-26 18:25:03 | 显示全部楼层    本楼为最佳答案   
order=getchar(); // 你输入1个字符,其实有2个,(1个可见字符,1个回车)
getchar(); // 加getchar() 吃掉回车
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-26 18:29:27 | 显示全部楼层
ba21 发表于 2022-11-26 18:25
order=getchar(); // 你输入1个字符,其实有2个,(1个可见字符,1个回车)
getchar(); // 加getchar() 吃 ...

我试试,哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-26 18:32:39 | 显示全部楼层
ba21 发表于 2022-11-26 18:25
order=getchar(); // 你输入1个字符,其实有2个,(1个可见字符,1个回车)
getchar(); // 加getchar() 吃 ...

请问下用scanf可行吗,我试了试还是老样子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-26 18:38:29 | 显示全部楼层
zwj.123 发表于 2022-11-26 18:32
请问下用scanf可行吗,我试了试还是老样子

你不看看你有几个地方使用了getchar()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-26 18:43:11 | 显示全部楼层
ba21 发表于 2022-11-26 18:38
你不看看你有几个地方使用了getchar()

我把全部getchar 改成了scanf发现没有变化,然后我在出问题的句子后面加上了getchar(),发现问题解决了,这就令我疑惑的是scanf它也接受前面留下的回车吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-26 18:58:27 | 显示全部楼层
本帖最后由 zwj.123 于 2022-11-26 18:59 编辑
ba21 发表于 2022-11-26 18:38
你不看看你有几个地方使用了getchar()


噢噢,知道错误了捏,谢谢麻烦您了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-26 10:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表