当前位置: 首页 > news >正文

没有收款接口网站怎么做收款/seo咨询服务价格

没有收款接口网站怎么做收款,seo咨询服务价格,p2p网站功能,淘宝网页设计价格1.回车与换行 回车(CR, \r): 作用:将光标移动到当前行的行首(最左侧),但不换到下一行。 历史来源:源自打字机的“回车”操作——打字机的滑架(Carriage)需…

在这里插入图片描述

1.回车与换行

回车(CR, \r):

  • 作用:将光标移动到当前行的行首(最左侧),但不换到下一行。
  • 历史来源:源自打字机的“回车”操作——打字机的滑架(Carriage)需要手动推回行首。
  • ASCII码0x0D(十六进制),或\r(转义字符表示)。

换行(LF, \n):

  • 作用:将光标移动到下一行的同一列位置(垂直向下移动一行),但不改变水平位置。
  • 历史来源:打字机的“换行”操作——滚筒旋转一行。
  • ASCII码0x0A(十六进制),或\n(转义字符表示)。
printf(“hello world!\n”);

这里的\n把回车换行的动作都做了,因为C语言会根据当前操作系统自动处理 \n,无需手动写 \r\n(Windows)或 \n(Unix)。

2.行缓冲区

下面的这段代码执行会有什么现象?

#include <stdio.h>
#include <unistd.h>int main()
{printf("hello world!\n");sleep(2);return 0;
}

答案是,这里显示器打印出hello world!,然后再sleep两秒钟程序结束。

那么要是把\n去掉,代码执行会有什么现象?

#include <stdio.h>
#include <unistd.h>int main()
{printf("hello world!");sleep(2);return 0;
}

我们执行后发现,刚开始程序不显示,过了两秒之后,程序快结束时,hello world!打印出来。

那为什么有\n显示器打印是立即显示呢?而没有\n程序是过了两秒再打印呢?sleep在printf之前执行??

我们要知道,C语言执行代码时,一直是从上向下执行的,所有一定是先执行printf,再执行sleep。但为什么打印的内容也是在休眠2秒之后才显示呢?这期间已执行完的内容在哪?——缓存区!!

缓冲区是给显示器提供的,所以只要有缓冲区就必然存在一个刷新策略!

显示器的刷新策略:行刷新!所以有\n,立即显示;没有\n,整个程序结束,然后显示。

如果我们就是想让这个不带\n的程序立即刷新怎么办?

C提供了对应的fflush策略,可以直接强制刷新。

在这里插入图片描述
在这里插入图片描述

stdin对应键盘

stdout,stderror对于显示器

printf打印,是把信息写在stdout(标准输出)里面,所以打印时信息没有刷出来,就用fflush刷新一下标准输出,就可以把这个字符串立即刷新出来。

#include <stdio.h>
#include <unistd.h>int main()
{printf("hello world!");fflush(stdout);sleep(2);return 0;
}

3.demo——倒计时程序

字符输入到显示器上什么位置由谁决定?

是由光标决定。

如果我们的光标在第一个位置,写入9,这时光标会向后移动,但我们想办法让光标再移动到开头,再向里面写8,…,按照这样的原理,我们就可以很容易的实现一个倒计时程序。

#include <stdio.h>
#include <unistd.h>int main()
{int cnt=9;while(cnt>=0){printf("%d\n",cnt);cnt--;sleep(1);}return 0;
}

在这里插入图片描述

这虽然是个倒计时,但并不是我们想要的那种。

今天我们了解了回车,那就可以修改一下我们的代码。

#include <stdio.h>
#include <unistd.h>int main()
{int cnt=9;while(cnt>=0){printf("%d\r",cnt);cnt--;sleep(1);}return 0;
}

我们执行后发现,它竟然什么都不打印了!?

哦哦!!原来是因为把\n变成\r后,没有\n了,所以数字会被写在缓存区里,一直不被更新。

那我们刷新一下吧。

#include <stdio.h>
#include <unistd.h>int main()
{int cnt=9;while(cnt>=0){printf("%d\r",cnt);fflush(stdout);cnt--;sleep(1);}return 0;
}

执行后发现一切正常。?

那0为什么被覆盖掉了?

原来当我们程序退出时,命令行也要打命令行字符串,所以就会把0覆盖掉。

所以我们最后再加一个打印换行符,不然0就会被覆盖掉。

#include <stdio.h>
#include <unistd.h>int main()
{int cnt=9;while(cnt>=0){printf("%d\r",cnt);fflush(stdout);cnt--;sleep(1);}printf("\n");return 0;
}

此时就很完美了。

如果我们要是从10开始倒计时呢?修改后发现为什么只有个位数变化呢?!?

在这里插入图片描述
在这里插入图片描述

其实显示器只认字符,显示器是字符设备。

我们在显示器上打的10,其实不是十,而是1和0两个字符。

我们再修改一下,指定输出十进制整数,宽度至少2个字符,不足补空格。不过%2d默认是左对齐补位(空格填充在数值的左侧),我们想要右对齐,可使用%-2d。

#include <stdio.h>
#include <unistd.h>int main()
{int cnt=10;while(cnt>=0){printf("%-2d\r",cnt);fflush(stdout);cnt--;sleep(1);}printf("\n");return 0;
}

这样就可以了。

4.进度条

我们想写一个进度条不断的推进,旁边有一个百分比不断在增长,和一个不断在旋转的光标。

process.c

#include "process.h"
#include<string.h>
#include<unistd.h>#define SIZE 101
#define STYLE '#'//v2:根据进度,动态刷新一次进度条
void FlushProcess(const char *tips,double total,double current)
{const char *lable = "|/-\\";int len = strlen(lable);static int index =0;char buffer[SIZE];memset(buffer,0,sizeof(buffer));double rate = current*100.0/total;int num=(int)rate;int i = 0;for(;i < num;i++)buffer[i]=STYLE;printf("%s...[%-100s][%.1lf%%][%c]\r",tips,buffer,rate,lable[index++]);fflush(stdout);index %= len;if(num >= 100)printf("\n"); 
}//v1:展示进度条基本功能
void process()
{int rate=0;char buffer[SIZE];memset(buffer,0,sizeof(buffer));const char *lable="|/-\\";int len = strlen(lable);while(rate <= 100){printf("[%-100s][%d%%][%c]\r",buffer,rate,lable[rate%len]);fflush(stdout);buffer[rate] = STYLE;rate++;usleep(10000);}printf("\n");
}                                                                                          

process.h

#pragma once#include <stdio.h>//v1
void process();//v2
void FlushProcess(const char* ,double total,double current); 

main.c

#include "process.h"
#include <unistd.h>
#include <time.h>
#include<stdlib.h>//函数指针类型
typedef void (*call_t)(const char*,double,double);double total = 1024.0;
//double speed[]=1.0;
double speed[]={1.0,0.5,0.3,0.2,0.1,0.01};void download(int total,call_t cb)
{srand(time(NULL));double current=0.0;while(current <= total){cb("下载中",total,current);//进行回调if(current >= total) break;//下载代码int random = rand() % 6;usleep(5000);current += speed[random];if(current>=total) current=total;}
}void upload(int total,call_t cb)
{srand(time(NULL));double current=0.0;while(current <= total){cb("上传中",total,current);//进行回调if(current >= total) break;//下载代码int random = rand() % 6;                                                              usleep(5000);current += speed[random];if(current>=total) current=total;}
}int main()
{                                                                                       download(1024.0,FlushProcess);printf("download 1024.0 MB done\n");download(512.0,FlushProcess);printf("download 512.0 MB done\n");download(256.0,FlushProcess);printf("download 256.0 MB done\n");download(128.0,FlushProcess);printf("download 128.0 MB done\n");download(64.0,FlushProcess);printf("download 64.0 MB done\n");upload(500.0,FlushProcess);return 0;
}

Makefile

BIN=process
#SRC=$(shell ls *.c)
SRC=$(wildcard *.c)
OBJ=$(SRC:.c=.o)
CC=gcc
RM=rm -f$(BIN):$(OBJ)@$(CC) $^ -o $@@echo "链接 $^ 成 $@"
%.o:%.c@$(CC) -c $< #-g@echo "编译 ... $< 成 $@".PHONY:clean
clean:@$(RM) $(OBJ) $(BIN).PHONY:test
test:@echo $(BIN)@echo $(SRC)@echo $(OBJ)

在这里插入图片描述

在这里插入图片描述

http://www.whsansanxincailiao.cn/news/32008656.html

相关文章:

  • 阿里巴巴国际网站做网站可以吗/百度推广助手客户端
  • 做cpa的博客网站类型/湖北网络推广有限公司
  • 360浏览器打不开90设计网站/南宁seo手段
  • 国家对小微企业扶持2022政策/热狗网站关键词优化
  • 商城平台/济南seo优化外包服务
  • 如何选择企业建站公司/长沙网站优化效果
  • 下载企业微信app免费/湘潭seo培训
  • 从0搭建一个网站/线上推广100种方式
  • 青岛企业网站建设优化/网络营销策略方案
  • 网站开发好的语言/北京网站制作推广
  • 写作网站哪个能得稿费/营销策略都有哪些方面
  • 做蛋糕视频教学网站/seo关键词
  • 做特卖网站/今日热点新闻2022
  • 长春网站建设招代理/关键词优化公司电话
  • 手机企业网站源码/手机优化软件哪个好用
  • 沈阳做网站黑酷科技/引流用什么话术更吸引人
  • 小视频解析网站怎么做/北京网络营销推广培训哪家好
  • 摄影网站建设方案/作品提示优化要删吗
  • 公司网站建设一年多少钱/经典软文案例分析
  • 宣传页制作/seo关键词快速提升软件官网
  • 宿迁网站设计/seo网络推广方法
  • 公司做网站流程流程/宁波seo推广外包公司
  • 网站标题关键词怎么做/广州网站排名优化公司
  • 连云港建设企业网站/搜狗搜索网
  • 深圳商城网站设计推荐/浏览器观看b站视频的最佳设置
  • 郑州网站建设精英/下载百度2024最新版
  • 长沙营销型网站建设/成都网络推广
  • 小说类网站怎么做/百度官网首页网址
  • 购物网站中加减数目的怎么做/软文范例200字
  • 做网站有几种语言/企业品牌推广