C语言中当先输入整数时再输入字符数据时,输入整数时的回车符会残留下来,影响字符的输入的解决方案

C语言中输入整数后如果按了回车符后进入下面的程序时之前的回车符会留着缓冲区下,之后如果执行到输入字符的程序,回车符会把这个字符直接顶掉,从而出现明明写了需要输入字符缺直接被跳过的情况。
解决方法:
1、调整输入的顺序,先输入字符,再输入整数。
2、scanf("%*[^\n"),scanf("%*c") 必须在确定有垃圾数据的情况才能使用,否则必须补一个回车符。
3、stdin->_IO_read_ptr = stdin->_IO_read_end;
把输入缓冲区当前位置指针调整到缓冲区的末尾。
只能在Linux下使用,不能跨平台。
程序实例
专门挑选了在学习中遇到的典型的程序
学习普通链表编写学生管理系统的程序中

void add_stu(void) 
{ 
	Student* stu = malloc(sizeof(Student));
	printf("请输入学生的学号 姓名 成绩");
	scanf("%u %s %f",&stu->id,stu->name,&stu->score); 
	add_tail_list(list,stu);
}
void del_stu(void) 
{
          stdin->_IO_read_ptr = stdin->_IO_read_end;        
          printf("请选择按姓名删除(n),还是学号删除(i):");              
        	if('n'==getch()) 
        	{    
        	  char name[20] = {};
        		printf("请输入要删除的姓名:");
                gets(name);  
        		int cmp(const void* ptr1,const void* ptr2)
        		{ 
        			const Student* stu = ptr1;
        			const char* name = ptr2;
        			return strcmp(stu->name,name);
        		}  
        		printf("%s",name);
        		printf("删除%s\n",del_value_list(list,name,cmp)?"成功":"失败");
            } 
        	else 
        	{ 
        		size_t id = 0;
        		printf("请输入要删除的学号:");
        		scanf("%u",&id); 
        		int cmp(const void* ptr1,const void* ptr2) 
        		{ 
        			const Student* stu = ptr1;
        			const size_t* id = ptr2;
        			if(stu->id>*id) 
        				return 1;
        			else if(stu->id<*id)
        				return -1;
        			else
        				return 0;            
        		} 
        		printf("删除%s\n",del_value_list(list,&id,cmp)?"成功":"失败");
        	}
        } 
        void show_stu(void) 
        { 
        	void show(const void* ptr) 
        	{ 
        		const  Student* stu =ptr;
        		printf("%u %s %g\n",stu->id,stu->name,stu->score);
        	} 
        	show_list(list,show);
        } 
        int main()
        {  
           list = creat_list();
           add_stu();
           show_stu();
          del_stu() ;
        }  

//先执行的add_stu();结尾输入的score后执行del_stu()程序不加这行stdin->_IO_read_ptr = stdin->_IO_read_end; 之前的回车会把if(‘n’==getch()) 直接顶掉从而出现明明写了输入程序却不出现让你输入选项的情况

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值