网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
04月06日漏签0天
c语言吧 关注:801,942贴子:4,377,506
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 0回复贴,共1页
<<返回c语言吧
>0< 加载中...

接着上文继续

  • 只看楼主
  • 收藏

  • 回复
  • 贴吧用户_aSDbMWR
  • 酱油
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
ch=getc(stdin);
if (ch == 114)//F4 Key. android phone is VolumeUp + r Key.
//if (ch == 27)
//实现用户手动存盘。
{
ch = '\0';//转换114为'\0'。
//putc('\n', stdin);//这里,也可以用ungetc()函数。因为ungetc()是专业的。我推荐用ungetc(),虽然putc()在类
//unix也能胜任。但类windows就说不准了。也许,国际标准组织已经想到这个问题并已解决。使得C函数可自由正确的处理不同大小端操作系统平台的任务。因为,windows是大端存储,unix是小端存储。macos也是类unix系统,所以它也是小端存储。
/* C 库函数 int ungetc(int char, FILE *stream) 把字符 char(一个无符号字符)推入到指定的流 stream 中,以便它是下一个被读取到的字符。 */
//所以,可以使用专业的字符推回流中的函数。虽然putc()可以胜任这个工作。下面,我们试试专业的函数。
ungetc('\n', stdin);
ch = getc(stdin);
if (ch == '\n')
ch = '\0';
putc(ch, stderr);//这样可以。
//putc(ch, fp);//这不需要。
fflush(fp);
}
//只有从键盘输入换行键,导致stdin刷新。才会调用输入输出函数。比如这里的getc()。
//所以,我只能祈祷你尽快按enter键了。只有按了enter键才能马上执行下面的功能。不然只能等到缓冲区(可能1024字节)满。
//而用fflush()刷新stdin,是为定义的行为。所以,我不打算那样做。
//而另外一个办法就是,把换行键放入stdin。从而,导致一连惯的连锁相应。连锁执行。这有办法做到,标准库有那样的函数。
//这也就能实现用户手动存盘的功能了。
if(ch==27)/*27 is ESC Key ascii value.*/
//ch = '\0';//实际上,这一行是多余的。不需要。因为break;直接退出了循环体。根本不给下面
//putc(ch, fp);把字符写入文件的机会。所以没有这一句,也不会把ESC写入文件。
break;
//if (ch == '\n')
// ch = 'p';
/*if (ch == 114)
ch = '\0';
if (ch == '\n')
ch = '\0';
*/
putc(ch, fp);//写入fp所指向的文件缓冲区,可能是4096字节。但此时并未把字符写入磁盘。
//这样的话,当我们写入大量符号时,一旦电脑断电,一切写入的符号都消失了。或者,程序由于未知错误导致闪退。也会一样。
//所以,应该在写入一些符号后,手动刷新文件缓冲区。使符号写入磁盘。这是一种安全措施。
//printf("putc()exe le zhi hou ,xia mian d ye zhi xing le.");
//goto skip_flush;
character_count++;
if (character_count >= 60)//防断电,防闪退。当按enter键,
//并且加上enter键前面总共敲击多于或等于60字节(包括enter键)的时候。
//把它们保存到磁盘相应的文件路径位置。
//根据这个启发,我们还可以制作让用户手动存盘的功能。
//这个功能只有输入了大于等于60个英文符号,并且之后输入了enter键。
//才会存盘。不然,断电还是一样丢失数据。这样的话,不要60字节限制了。直接按enter键之后,直接存盘,更安全。
//这就变成了enter键1个条件即可存盘。刚开始要2个条件。
//那么,这样的功能很容易实现,只要在循环体末尾加条fflush()就行了。
{
fflush(fp);
character_count = 0;
}


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 0回复贴,共1页
<<返回c语言吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示