设为首页 加入收藏

TOP

C语言第11天,输入输出缓存和函数(一)
2023-07-23 13:29:03 】 浏览:48
Tags:

一、输出缓存

例题:输出"HelloWorld"十次,每次输出后暂停500毫秒。

#include<stdio.h>
#include<windows.h>
int main()
{
for (int i = 0; i <= 10; i++)
{
printf("helloworld%d ",i);
Sleep(500);
}
return 0;
}

在windows系统上,我们使用windows.h头文件中提供的Sleep函数,每次输出后休眠500毫秒。

//linux系统

#include<stdio.h>

#include<unistd.h>

int main()

{for(int i=0;i<10;i++)

{printf("HelloWorld%d",i);

usleep(1000*500);//使用usleep函数休眠500毫秒}

return 0;}

而在linux系统上,休眠5000毫秒,打印出所有HelloWorld

这是因为在windows系统下,使用printf后,数据被写入到输出缓存区。随后,立即刷新缓存区。

在linux系统下,使用printf后,数据被写入到输出缓存区。后续的printf会在缓存区积累数据,直到程序结束才刷新缓存区。

 

行缓存:一行结束后必须刷新缓存;

完全缓存:等到缓存区被填满,才刷新缓存。

所以只要Linux系统printf的%d后面加上\n就会实现目标

阻塞

#include<stdio.h>
int main()
{
char c1,c2;
c1=getchar();
putchar(c1);
getchar();//用于吸收'\n',不然\n会被c2吸收,从而c2将不会在输入
c2=getchar();
putchar(c2);
return 0;
}

程序运行到第一个getchar,由于输入缓存区没有数据,getchar进入阻塞状态,等待用户输入。在输入'A'并按回车后,"A\n"进入了输入缓存区。

第一个getchar获取了字符'A',解除阻塞状态,继续执行。接着用putchar打印c1。

执行到第二个getchar时,由于输入缓存区仍有字符'\n',第二个getchar将不进入阻塞状态,直接读取缓存区中的'\n',并继续执行。

2.不带缓存的输入函数

getch函数

#include<stdio.h>
#include<conio.h>
int main()
{
while (1)
{
char c;
c=_getch();//输入后,使用putchar打印在控制台上,_为vs的一种要求
putchar(c);
if(c=='q')
break;
}
return 0;

}

输入"1234567890q",程序立刻显示"1234567890q"并退出。

getche函数

与getch函数类似,不过它会自己将输入的字符打印在控制台上。getche函数相当于无缓存有回显的getchar。

#include<stdio.h>
#include<conio.h>
int main()
{
while (1)
{
char c;
c=_getche();//输入后,使用putchar打印在控制台上
if(c=='q')
break;
}
return 0;
}

输出结果与getch相同

请注意这两个函数需要包含头文件conio.h才可以被使用。

二、函数

 可以把函数看做一个盒子,这个盒子有如下几个特性:
1.开始执行时,函数可以被输入一些值
2.执行过程中,函数可以做一些事情
3.执行完成后,函数可以返回一些值
1.函数定义
函数的写法公式:函数返回值类型 函数名(函数输入参数值)
{做点什么事情
return函数返回值;}
被花括号包括的被称为函数体,注意函数体一定要被花括号包括且不可省略。花括号上面的函数名、函数参数及返回值被称作函数头。
例题:
定义一个加法函数
int add(int a,int b) //不能写成int a,b
{return a+b;}
2.函数的调用
#include<stdio.h>
int add(int a,int b)
{return a+b;}
int main()
{int result;
result=add(2,3); //函数调用
printf("%d",result);
return 0;}
main被称作主调函数,add被称作被调函数。在main中,将2,3两个参数传入了add函数,并调用add函数。
在add函数头中,标明了函数的返回值类型为int,说明这个函数被调用后将返回一个int类型的结果。所以,我们使用int类型的result变量存放add函数的返回值。
3.为什么要用函数
例题:求一个三角形面积
先用代码写一遍
#include<stdio.h>
#include<math.h> //sqrt需要包含math.h
int main()
{ //输入a,b,c
double a,b,c,p,s;
scanf("%lf%lf%lf",&a,&b,&c);
//是否能构成三角形
if(a+b>c&&a+c>b&&b+c>a)
{printf("It's atriangle\n");}
else
{ //无法构成三角形,程序结束。
printf("Notatriangle\n");
return 0;}
//求三角形的面积
p=(a+b+c)/2;
s=sqrt(p*(p-a)*(p-b)*(p-c));//海伦公式
//输出结果
printf("s=%f",s);
return 0;}
 
再使用函数
#include<stdio.h>
#include<math.h> //sqrt需要包含math.h
double area Of Triangle(double a,double b,double c)
{double p,s;
//求三角形的面积
p=(a+b+c)/2;
s=sqrt(p*(p-a)*(p-b)*(p-c));
return s;}
 
int isTriangle(double a,double b,double c)
{ //是否能构成三角形
if(a+b>c&&a+c>b&&b+c>a)
{return 1;}
return0;}
 
int main()
{ //输入a,b,c
double a,b,c;
scanf(
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇【c语言】整数拆分 下一篇OpenGL ES 版本介绍

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目