CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

对标准输入缓冲区的操作,请教!

楼主2108011027(Jar)2005-01-13 17:38:05 在 C/C++ / C语言 提问

想实现的功能是手动对输入缓冲区操作,预先向stdin写入数据,后边出现读取指令的时候不需要敲键盘就直接输入.  
  buffer_operation(FILE   *stdin,   const   char*);  
   
  void   main()  
  {  
  char *buf[100];  
  buffer_operation(stdin,   "good");  
  scanf("%s",   buf); //此处能自动读取串"good"  
  }  
  多谢多谢,我自己没有找到类似的   标准函数,只有求救了 问题点数:100、回复次数:15Top

1 楼CMyMfc(星际人生:=E.F=FlyForEver)回复于 2005-01-13 17:43:39 得分 0

说明白点,   你的stdin中的数据是从输入的,   还是程序里给初始的Top

2 楼2108011027(Jar)回复于 2005-01-13 21:50:29 得分 0

数据是预设在程序中的,不使用键盘输入,我就想对stdin操作,但是不希望仅仅是重定向,而是要改写输入缓冲区Top

3 楼sunvin(星魄)回复于 2005-01-14 08:49:54 得分 0

不太明白搂主意思。是不是要求处理的字符串可以从程序中读入,但如果标准输入有输入的话,就将待处理的字符串改为标准输入的结果啊?直接开个buffer,设置初值然后scanf就可以了Top

4 楼piaozi2003()回复于 2005-01-14 08:57:59 得分 30

不是很明白你的意思,但看你的函数声明buffer_operation(FILE   *stdin,   const   char*)  
  你是把一个字符串在程序内部传给流,可以考虑用ungetc(int   c,   FILE   *fp);  
   
  设置一个循环后将字符串的字符依次推回到stream中,下面的fscanf不就可以从stream中获取数据了吗?不知道是不是你的意思?Top

5 楼xxiaoran(心翛然)回复于 2005-01-14 09:06:51 得分 0

不懂,dingTop

6 楼playmud((猪头流氓)(抵制日货)(热烈庆祝火箭输球))回复于 2005-01-14 09:12:26 得分 0

你放到一个数组里面不行嘛?Top

7 楼snow810211(阳光)回复于 2005-01-14 09:18:11 得分 0

先用sprintf()输入到缓冲区,然后可以对缓冲改写,然后呢,在sscanf读入。  
   
  可以吗?Top

8 楼keple(今天你爬了没?)回复于 2005-01-14 09:32:28 得分 0

对呀,先放到缓冲区中,然后在读取数据把!!java上是这样的对吧!!Top

9 楼Flood1984(峰子)回复于 2005-01-14 09:41:54 得分 20

对缓冲区的操作库函数在头文件   stdio.h中,  
  设置缓冲区使用函数setbuf();  
  有2个参数,为流和缓冲区,  
  比如你的情况需要用  
  char   s[50];  
  setbuf(stdin   ,   s);  
  然后S就是键盘输入的缓冲区。Top

10 楼2108011027(Jar)回复于 2005-01-14 12:10:18 得分 0

piaozi2003()    
  你给的这个函数应该是我想要的,但是现在有一个问题,我将这些字符回写到缓冲区之后,调用scanf或者getchar,都不能自动读取,必需在键盘上敲过确认键才能读出,这可能涉及到在两个函数的内部实现,请问一下这个能不能解决?(无须人为确认)Top

11 楼kobefly(科比--网络学习中)回复于 2005-01-14 12:30:53 得分 20

你给的这个函数应该是我想要的,但是现在有一个问题,我将这些字符回写到缓冲区之后,调用scanf或者getchar,都不能自动读取,必需在键盘上敲过确认键才能读出,这可能涉及到在两个函数的内部实现,请问一下这个能不能解决?(无须人为确认)  
   
  是不是可以在你回些字符的时候,加个回车字符结尾  
  模拟键盘的回车  
   
  Top

12 楼piaozi2003()回复于 2005-01-14 13:16:54 得分 20

如果你的程序是面向交互环境的话,缓冲区是行缓冲,只要一行结束(\n)或者超过缓冲区长度都会输出到你的默认输入端,所以你在回推的时候要注意一行结束后回推'\n',这也就相当于模拟敲键盘的回车键!  
   
  另外fflush()是佛可以配合用在你的程序中,我没有多想,你自己考虑考虑?:>Top

13 楼piaozi2003()回复于 2005-01-14 13:19:05 得分 0

改错:上面的默认输入端应为默认输出端Top

14 楼yanran_hill(燕然)回复于 2005-01-14 13:31:27 得分 10

>>你给的这个函数应该是我想要的,但是现在有一个问题,我将这些字符回写到缓冲区之后,调用scanf或>>者getchar,都不能自动读取,必需在键盘上敲过确认键才能读出  
  如果是使用的unix系统,那么可以使用curses库中的raw()函数,按的键将直接被系统读到,而不必等待按enterTop

15 楼2108011027(Jar)回复于 2005-01-16 16:13:28 得分 0

多谢多谢,我显式定义缓冲区时加了换行符没看到什么作用,不过在ungetc的时候推入换行符是有用的。Top

相关问题

  • (急)怎样清空输入缓冲区???
  • 键盘缓冲区的操作
  • C#中如何操作缓冲区?
  • 急!如何清除键盘输入缓冲区
  • MScomm的输入缓冲区怎么设置?
  • 关于输入缓冲区的问题,请帮忙解答
  • 请问,怎么清空输入缓冲区
  • 请问如何清空键盘输入缓冲区????????
  • 如何对显卡缓冲区执行操作?
  • 如何清除输入缓冲区的内容(cin),急待回复,谢谢!

关键词

  • 函数
  • 字符
  • 键盘
  • 数据
  • 缓冲区
  • 字符串
  • 输入
  • 读取
  • stdin
  • 多谢

得分解答快速导航

  • 帖主:2108011027
  • piaozi2003
  • Flood1984
  • kobefly
  • piaozi2003
  • yanran_hill

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo