缓冲区

输入缓冲区

从键盘得到数据的时候用户输入的数据首先进入输入缓冲区,然后程序从输入缓冲区里获得数字,先进入输入缓冲区的数据必须先处理(类似排队),如果先进入输入缓冲区的数据无法处理,程序就得不到后进入输入缓冲区的数据。使用以下两条固定语句可以删除输入缓冲区里的无效数据:

scanf("%*[^\n]");	//删除输入缓冲区里第一个'\n'符前面的所有内容
scanf("%*c"); //删除输入缓冲区里第一个字符

输出缓冲区

printf标准函数把要显示的内容放在输出缓冲区里,计算机在合适的时候把输出缓冲区里的内容显示在屏幕上,以下四种情况下输出缓冲区里的内容会显示在屏幕上:

1.如果输出缓冲区里包含换行字符则换行字符前面的部分会显示在屏幕上

2.如果程序结束了则它放在输出缓冲区里的内容会显示在屏幕上

3.如果输出缓冲区被充满了则它里面的内容会显示在屏幕上

4.在程序里使用一条固定语句 fflush(stdout);可以强制把输出缓冲区里的内容显示在屏幕上(scanf函数也有这样的作用)

数组

数组可以用来代表内存里一组连续的同类型的存储区,这些存储区叫做数组的元素,数组也需要先声明然后才能使用,声明数组的时候除了需要提供类型名称和数组名称以外还需要提供一个整数表示数组里的存储区个数。

数组一旦存在它里面包含的存储区个数就不可以改变了,数组通常不可以作为整体使用,一般一次只使用其中的某个存储区,数组里每个存储区的编号不同,这个编号叫做数组的下标,数组里第一个存储区的下标是0,向后依次递增,最大下标是存储区个数减一,超过范围的下标不可以使用(类似闯红灯)

数组名称和下标一起可以用来表示数组里的存储区,可以在for循环里依次处理数组里的所有存储区 ,这个循环的循环变量应该依次代表数组里的所有有效下标,初始化数组的时候可以提供多个数据,他们应该写在一对大括号中间,相邻初始化数据之间用括号分开,初始化数组的时候如果初始化数据的个数比存储区的个数多就把多余的初始化数据忽略。

初始化数组的时候如果初始化数据的个数比存储区的个数少就把后面的存储区初始化成0,初始化数组的时候如果初始化数据的个数和数组里存储区的个数一样多就可以省略数组声明里的存储区个数。

练习:编写程序从键盘得到多个数字(数字个数不超过5个,由用户实现给定),把这些数字按照倒序显示在屏幕上,然后计算这些数字的和并把结果显示在屏幕上。

练习:编写程序得到一张彩票(彩票由7个1到36之间的整数构成),然后把彩票里的所有数字显示在屏幕上。

数组名称不可以代表存储区,数组名称可以用来代表第一个存储区的地址,数组名称不可以被赋值,可以对数组名称进行sizeof计算,结果是数组里所有存储区的总大小。C99规范里允许使用变长数组,声明变长数组的时候使用变量表示数组里的存储区个数。

变长数组

如果多次运行这个程序则每次变长数组里包含的存储区个数都可能不同。在某一次运行程序的过程中变长数组里包含的存储区个数不会改变,变长数组不可以初始化

一维数组

声明一维数组时只需要用一个整数表示数组里的存储区个数

多维数组

多维数组不仅可以表示多个存储区,还可以对他们进行分组(分组可以多次进行)。

二维数组

二维数组是最常见的多维数组,他只能表示存储区的一次分组情况,声明二维数组的时候需要提供两个整数,第一个整数表示分组个数,第二个整数表示分组里的存储区个数。二维数组通常也不能作为整体 使用,一般一次只使用其中某个存储区,表示二维数组里存储区的时候需要提供两个下标,前一个下标表示分组编号(组下标),后一个下标表示分组里的存储区编号(组内下标),组下标的有效范围从0开始到分组个数减一为止;组内下标的有效范围从0开始到分组里存储区个数减一为止。

可以把二维数组当作一维数组进行初始化,也可以在初始化二维数组的时候对初始化数据进行分组,每组初始化数据用来初始化一组存储区。如果可以根据初始化数据个数计算出分组个数就可以省略二维数组声明里的分组个数。

点击查看代码
/*
*
*
*输入缓冲区管理
*
*
* */
#if 0
#include<stdio.h>
int main (){
int num = 0;
printf("请输入一个数字:\n");
scanf("%d",&num);
scanf("%*[^\n]");
scanf("%*c");
printf("num=%d\n",num);
printf("请输入一个数字:\n");
scanf("%d",&num);
printf("num=%d\n",num);
return 0;
} #elif 0
/*
*
*输出缓冲区
*
*
* */
#include<stdio.h>
int main (){
printf("1");
fflush(stdout);
while (1){
}
return 0;
} #elif 0 /*
*
*数组演示
*
* */
#include<stdio.h>
int main (){
int arr[5]; //数组声明语句
int num = 0;
arr[2] = 10;
for (num = 0;num <= 4;num ++){
arr[num] = num;
}
for (num = 4;num >= 0;num --){
printf(" %d ",arr[num]);
}
printf("\n");
return 0;
} #elif 0
/*
*
*数组练习
*
*
* */
#include<stdio.h>
int main (){
int arr[5] = {0};
int qty = 0,num = 0,sum = 0; //用户输入的数字个数qty <5
printf("请输入数字个数:\n");
scanf("%d",&qty);
for (num = 4;num >= 0;num--){
printf("请输入一个数字:\n");
scanf("%d",&arr[num]);
if (num == 5 - qty){
//检查数组是否被填满
break;
}
}
for (num = 5 - qty;num <= 4;num++){
printf("%d",arr[num]); //倒序显示用户输入的数字
}
printf("\n");
for (num = 5 - qty;num <= 4;num++){
sum += arr[num];
}
printf("求和结果是: %d \n",sum);
return 0;
} #elif 0
/*
*
*得到7个1到36之间的随机数
*将数字显示出来
*
* */
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main (){
int num = 0,tmp = 0,cnt = 0,num1 = 0; //cnt 用于记录已经得到有效数字
int arr[7] = {0},arr1[7] = {0};
srand(time(0));
/*for (num = 0;num <= 6;num++){
arr[num] = rand() % 36 + 1;
}//含有重复的数字
*/
do {
tmp = rand() % 36 + 1;
for (num = 0;num <= cnt - 1;num++){ //把新数字和以前得到的所有数字依次作对比
if (tmp == arr[num]){
break;
}
}
if (num == cnt){
arr[cnt] = tmp;
cnt++;
}
}while(cnt < 7);
for (num = 0;num <= 6;num++){
printf(" %d",arr[num]);
}
printf("\n");
for (num = 0;num <= 6;num++){
printf("请输入一个数字:\n");
scanf("%d",&arr1[num]);
}
cnt = 0;
for (num = 0;num <= 6;num++){
for (num1 = 0;num1 <= 6;num1++){
if (arr[num] == arr1[num1]){
cnt++;
break;
}
}
}
printf("买对的数字个数%d\n",cnt);
return 0;
} #elif 0 #include<stdio.h>
int main (){
int arr[5] = {0};
printf("arr是%p\n",arr);
printf("arr[0]是%p\n",&arr[0]);
printf("sizeof(arr)=%ld\n",sizeof(arr));
return 0;
} #elif 0
#include<stdio.h>
int main (){
int size = 0;
printf("请输入一个数字:");
scanf("%d",&size);
int arr[size]; //变长数组
printf("sizeof(arr)=%ld\n",sizeof(arr));
return 0;
} #elif 1
/*
*
*
*二维数组
*
* */
#include<stdio.h>
int main (){
int arr[3][2],cnt = 0;
// arr[1][0] = 0;
int row = 0, col = 0;
for (row = 0;row <= 2;row++){
for (col = 0;col <= 1;col++){
arr[row][col] = cnt;
cnt++;
}
}
for (row = 0;row <= 2;row++){
for (col = 0;col <= 1;col++){
printf(" %d ",arr[row][col]);
}
printf("\n");
}
return 0;
}
#endif

while循环和do循环、缓冲区、一维数组的更多相关文章

  1. Java基础学习(一) -- Java环境搭建、数据类型、分支循环等控制结构、简单一维数组详解

    一:java概述: 1982年,SUN公司诞生于美国斯坦福大学校园,并于1986年上市,在NASDAQ(纳斯达克:是全美证券商协会自动报价系统)的标识为SUNW,2007年改为JAVA. 2009年4 ...

  2. java 基础 04 循环结构 一维数组

    内容: (1)循环结构 (2)一维数组 1.循环结构 1.1for循环 (1)语法格式 for(初始化表达式1;条件表达式2;修改初始化表达式3){ 循环体; } (2)执行流程 执行初始化表达式 = ...

  3. 【php】实现多个一维数组转换成二维循环数组

    1.目的:将下面类型数组转换成模板循环打印二维数组 数组库一维数组: 模板要求循环二维数组: 2.代码: header("Content-type: text/html; charset=u ...

  4. js循环一维数组按指定长度截取为二维数组

    //随便创建一个数组 let data = "abcdefghijklmnopkrstuvw12322999".split(""); //总数组 let pro ...

  5. 059 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 06 增强型for循环

    059 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 06 增强型for循环 本文知识点:增强型for循环 增强型for循环格式 案例练习增强型for循环 数组名字 ...

  6. 学JAVA第九天,for循环算质数及for遍历数组的方法。

    昨天终于收到了评论,老开心了!!! 算质数之前是我最怕的一件事,以前上学不好好学,之前学C#的时候也没好好研究, 直到今天老师逼我要用JAVA算质数,硬着头皮琢磨老半天才琢磨透,现在看来也挺简单的. ...

  7. 410 for 循环 运算 改变循环的控制流 死循环 遍历数组 定义方法 有名函数匿名函数 定义函数的方法取值 date math 局部变量 函数 局部与全局变量 次幂/随机数/取绝对值/向上取整/平方根

    for(1.表达式1;2.表达式2;3.表达式3){ 4.循环体语句; } 先执行1 ,在执行2, 表达式, 如果2结果为false,退出循环 如果2是true 执行4 在执行3 执行2 举例打印1- ...

  8. js循环处理后台返回的json数组

    <script type="text/javascript"> function gongdan_search(elm){ var dangqian_value=$(e ...

  9. 创建一个长度是5的数组,并填充随机数。使用for循环或者while循环,对这个数组实现反转效果

    package day01; import java.util.Random; /** * 首先创建一个长度是5的数组,并填充随机数.使用for循环或者while循环,对这个数组实现反转效果 * @a ...

  10. js循环判断创建新对象放数组中

    原效果 之后效果: <!doctype html> <html lang="en"> <head> <meta charset=" ...

随机推荐

  1. 很好用的python游戏环境(续):强化学习算法走迷宫游戏环境(导航问题 navigation):分享一个python语言的迷宫游戏环境

    相关: 很好用的python游戏环境:强化学习算法走迷宫游戏环境(导航问题 navigation):分享一个python语言的迷宫游戏环境 前文分享了一个python下的maze游戏环境,本文再给出一 ...

  2. 向日葵的平替:fastnat的使用

    相关: 向日葵的平替:一款个人开发的远程工具--fastnat ---------------------------------------------- 1. 下载安装 2. 注册设备 我这里在两 ...

  3. Leetcode: 1484. Groups Sold Products By The Date

    题目要求如下: 输入的数据为 要求按照日期查询出每日销售数量及相应产品的名称,并按照字符顺序进行排序. 下面是实现的代码: import pandas as pd def categorize_pro ...

  4. Maven经验分享(一)安装部署 转

    Maven安装部署 1.安装 在安装Maven之前,首先要确认你已经正确安装了JDK.Maven可以运行在JDK 1.4及以上的版本上.本书的所有样例都基于JDK 5及以上版本 目录下的安装包,直接a ...

  5. dubbo序列化问题(一)浮点数问题 转

    dubbo是一个分布式服务框架,在国内比较常用,在开发过程中遇到一个浮点数反序列化问题. 问题描述,当参数是float类型的3.7,反序列化却得到了一个double类型的值:3.70000004768 ...

  6. 简简单单教你如何用C语言实现获取当前所有可用网口!

    一.获取本机所有可用网卡名 原理: 在 Linux 系统中,/proc 目录是一个位于内存中的伪文件系统. /proc目录是内核提供给我们的查询中心,通过查询该目录下的文件内容,可以获取到有关系统硬件 ...

  7. history的replace("/admin")与("admin")的区别

    假设当前路由为:localhost:3000/index/a 有"/"的情况是直接从根目录替换 改完之后的路由为:localhost:3000/admin 没有"/&qu ...

  8. Mac 打开软件提示‘“xxx”已损坏,无法打开。您应该将它移到废纸篓。’解决方法

    产生错误的原因是软件没有签名.使用下面的命令给软件签名就好了. sudo xattr -rd com.apple.quarantine /Applications/xxx.app

  9. Standard Quorum Intersection

    标准定足数交集 定义和背景 系统模型: 系统中有 \(n\) 个节点,其中最多 \(f\) 个节点可能是拜占庭故障节点(恶意节点). 为了保证容忍 \(f\) 个拜占庭节点,系统通常需要至少 \(3f ...

  10. 排除log4j-api ( 排除log4j )

    写法都一样,排除log4j,或者其相关的依赖 1. gradle: 1.1 判断是否有log4j a. 将war或jar解压后,搜索log4j b. 使用IDEA gradle菜单, 项目名-> ...