对标准输入缓冲区的操作,请教!
想实现的功能是手动对输入缓冲区操作,预先向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




