ungetc

 

ungetc是将读出的数据再次放回到缓冲区去,下一次读数据时,会再次读出来的。

不过如果把读出的数据放回到缓冲区去后,没有将缓冲区的数据读出来 就再次试图把读出的数据放回到缓冲区去---数据是放不进去的 (可以把缓冲区看做一个可变化的容器,当你把试图用ungetc()函数把读出的数据放回到缓冲区,缓冲区这个容器就为这些数据分配相应的大小空间,之后这个空间是不变的,直到你把缓冲区的数据读出去,所以你在没有释放缓冲区时,再次想往缓冲区装数据是装不进去的)

 

你可以比较程序一与程序二运行的结果证明上面的结论

 

程序一:

#include <stdio.h>

 

int main (int argc, char **argv)

{

 ungetc ('/n', stdin);

printf ("%c", getc(stdin));

 

  ungetc ('a', stdin);

 printf ("%c", getc(stdin));

 

  ungetc ('b', stdin);

printf ("%c", getc(stdin));

 

  ungetc ('c', stdin);

 printf ("%c", getc(stdin));

 

return 0;

}

 

程序二:

#include <stdio.h>;

int main (int argc, char **argv)

{

 

ungetc ('c', stdin);

ungetc ('b', stdin);

ungetc ('a', stdin);

ungetc ('/n', stdin);

 

printf ("%c", getc(stdin));

printf ("%c", getc(stdin));

printf ("%c", getc(stdin));

printf ("%c", getc(stdin));

 

return 0;

}

 

如果去掉rewind(p)这句可以输出一个字符 ,是的,输出时优先考虑缓冲区的数据的输出。

 

rewind(p)定位到文件的开始,当然只会输出文件里面的内容。

 

至于你要用上面的代码实现你说的功能 (这是一个返回字符的小程序)可以考虑把while {//code}改成这样

 

while((ch=fgetc(fp))!=EOF)

 {

 ungetc(ch,p);

  c=getc(p);

  putc(c,stdout);

 }

 

 

至于ungetc()函数的作用  个人观点:当你从流中读出字符,但却不是你需要的内容时,为了不改流的内容(也许此流另外有用),需要回写进流。写回后再读,仍会读出来

 

 

 

 

isprint

原型: int isprint(char ch);

功能: 判断字符c是否为可打印字符(含空格)

说明: 当c为可打印字符(0x20-0x7e)时,返回非零值,否则返回零

 

举例:

void print(char c)
{
    if (isprint(c)) printf("%c:是可打印字符/n",c);
    else printf("%c:不是可打印字符/n",c); 
}

void main()
{
    SetScreen(0);
    print('a');
    print(' ');
    print(0x7f);
    getchar();
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值