缓冲区和数组的输入输出问题
最近编写程序的时候一直被数据的输入输出所困扰,由此写篇博文总结一下最近遇到的问题和解决方法,错误之处望指正。
1.数组使用的一些语法注意事项
(1)数组的定义
一维数组:类型名 数组名 [常量表达式]
常量表达式中可以包括常量和符号常量,如int a[3+5]合法,int [a]不合法,即C语言不允许对数组的大小进行动态定义。
如果在被调用函数中(不包括主函数)定义数组,其长度可以是变量或者是非常量表达式,如:
void fun(int n)
{int a[2*n].............
}
在调用fun函数时,形参n从实参得到值,这种情况被称为“可变长数组”,允许在每次调用fun函数时,n有不同的值。但是在执行的时候,n的值是不可变的,数组长度是固定的。如果指定数组为静态(static),存储方式,则不能使用“可变长数组”,如static int a[2*n],不合法。二维数组:类型名 数组名 [常量表达式][常量表达式]
int arr[3][4],可以把arr[0],arr[1],arr[2],看成是数组名,即二维数组可以理解为数组的数组
(2)数组的初始化
定义数组的时候赋初值,并指定数组的长度:int arr[5] = {1,2,3,4,5}
定义数组的时候赋初值,不指定数组的长度,此时系统会根据初值的个数确定数组的长度,int arr[] = {1,2,3,4,5},数组的长度为5
定义数组的时候赋部分值:int arr[5] = {1,2},只给前二个赋值,系统会自动给后面三个赋初值为0,此时如果将数组里面的数据打印出来的话,打印的结果是12000。
定义数组时,如果已经定义了数组的长度并对之初始化,凡未被初始化的部分,系统会自动初始化,整型数组初始化为0,字符型数组初始化为'\0',指针数组为NULL。
二维数组初始化的几种形式,int arr[2][3] = {{1,2,3},{4,5,6}},int arr[2][3] = {1,2,3,4,5,6},int arr[2][3] = {{1},{2}}(未被初始化的部分自定义为0),int arr[2][3] = {{1}}
注意:如果全部元素都被赋初值,则定义数组时对第一维数组的长度可以不指定,但是第二维数组的长度不能省
2.字符数组使用中的语法注意
(1)字符数组的结束标志
C语言规定字符数组的结束标志为'\0',这个字符不算数组的有效长度中去,'\0',在ASCII码为0。
例如输出一个字符串,printf("I am happy\n");,在内存中存储时,系统会自动的在'\n'的后面加上一个'\0',在执行printf函数时,每输出一个字符检查一次,看下一个字符是否为'\0',遇到'\0'的时候停止输出。
(2)字符数组初始化
char ch[10] = {'I',' ','a','m',' ','h','a','p','p','y'};
如果字符的个数大于字符数组的长度,则语法错误,如果初始化字符的个数,小于数组的长度,系统会自动补'\0' char ch[] = {'I',' ','a','m',' ','h','a','p','p','y'};
如果定义时长度不确定,系统会根据初始化的字符个数确定数组长度,此时数组的长度为10,如果我们以字符串的形式同样的输入上面的字符,则数组的长度不是10,而是11,因为系统会自动的在后面加上'\0'。下面截图可以看出单个字符和字符串初始化数组的区别但是此时如果用printf("%s",arr1),将数组打印出来时,'\0'是不会被打印出来的
3.缓冲区和数组的输入输出问题
(1)逐个字符的输入和输出用"%c",字符串的输入和输出用"%s",如scanf("%s",arr);此时输入字符串时,输入的字符串的长度应该小于已经定义的字符数组的长度,因为系统会自动的不'\0',如果是单个字符输入时,输入的数据的长度可以是定义的字符数组的长度。如果利用一个scanf()输入多个字符串,输入时应该以空格隔开如
char str1[5],str2[5],str3[5];scanf("%s%s%s",str1,str2,str3);
如果此时输入"how are you",系统会分别把“how”,“are”,"you",赋值给str1,str2,str3注意:如果编写以下程序,则不会达到想要的结果
char str[13];scanf("%s",str);
此时如果输入"how are you",由于系统把空格当做是输入字符串之间的空格符,因此只讲空格前面的"how"赋值给了str,其余的部分补'\0'。还应该注意的是,scanf的输入项中如果是字符数组名,不要在前面加&,因为C语言中,数组名代表的就是数组的首地址,如果我们使用printf("%o",str),此时是用八进制输出数组str的首地址。在使用VS2013时,系统为了更加安全会让你使用scanf_s,此时的用法和scanf略有不同,不只需要传数组名还需要传入输入字符串的长度如下
char arr[10];scanf_s("%s",arr,10);
注意: 此时仍需要保证输入的字符串的长度小于定义的字符数组的长度,如果输入字符的个数超过数组的长度,就会把数组撑爆了,此时的scanf_s的返回值为0,如果用printf打印的话,则打印不了。,输入字符的个数最大还应该比数组长度小1,因为系统会自动补'\0'。使用gets_s函数时的用法相类似,gets(arr,10)。注意:gets_s()使用时,就不存在用空格作为字符串的分隔符,如下
char arr[10];gets_s(arr,10);
如果此时输入“hello ha”此时arr中存储的就是“hello ha\0\0”(2)一些常见的字符串处理函数(字符串处理函数时,应包含头文件<string.h>)
puts(str):字符串输出函数
gets(str):字符串输入函数,返回值是str的起始地址(put和gets只能输入输出一个字符串)
strlen(str):测量字符串长度函数,测试结果是字符串的实际长度,不包括'\0'
strcmp(str1,str2):字符串比较函数,比较规则是,将两个字符串自左到右逐个比较(按ASCII码值大小比较),直到出现不同的字符或者遇到'\0'为止,如果相等返回0,如果str1>str2返回一个正整数,否则返回一个负整数
(3)字符输入和输入缓冲区的问题
先说两个单个字符的输入和输出函数getchar(),putchar(),具体用法不在熬述。先看下面的程序
(未完待续,对不起)
相关文章:

目前python主要应用领域零售_python3读取HDA零售企业数据(一)
#-*- coding:utf-8 -*-# 下载河南FDA各药品经营企业目录import urllib.requestimport urllib.parseimport reimport osimport http.cookiejarheader {Connection: Keep-Alive,Accept: application/x-ms-application, image/jpeg, application/xamlxml, image/gif, image/pjpeg…

调试webservice遇到“测试窗体只能用于使用基元类型作为参数的方法”的解决办法...
之前一直写webservice 没有遇见这种情况,因为一般返回的参数整形 字符串 之类的 都是基本类型,最多也就是把xml序列化为一个字符串返回,这次遇到了返回一个引用类型的,不能直接调试了。所以,现在只能写一个程序把webse…

EJB3.1 JBoss7.1 Eclipse3.7
为什么80%的码农都做不了架构师?>>> EJB3.1 JBoss7.1 Eclipse3.7 ------Hello World 一、环境配置: JDK:正常配置 Eclipse:正常下载,解压(V3.7) JBoss:正常下载…

NOIP2012-摆花
放题目不解释~~~~ 【试题描述】 小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m盆。通过调查顾客的喜好,小明列出了顾客最喜欢的n种花,从1到n标号。为了在门口展出更多种花,规定第i种花不能…

github提交代码却没有显示绿格子
在github上提交代码之后,进入github上面查看自己的提交,可以看看刚刚的提交内容,但是却一直没有显示绿格子,一个原因是本地git的配置邮箱和github上面的邮箱不一致。 解决办法是,打开本地的git bash,然后直…

spark+openfire即时通讯工具二次开发参考文档
摘自: http://gmd20.blog.163.com/blog/static/168439232010527525542/ 其中Spark是开源的基于XMPP协议的即时通讯工具,公司最近也换到用这个了,说是在服务器(openfire)上可以备份消息,然后可以看员工的聊天记录 smac…

python selenium 等待页面加载完毕_Selenium_等待页面加载完毕
隐式等待WebDriver driver newFirefoxDriver();driver.get("www.baidu.com");driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);WebElement element driver.findElement(By.cssSelector(".abc"));((JavascriptExecutor)driver).executeS…

TechEd 2012奥兰多!
亚特兰大TechEd 2011如同昨天的事情,今天又无比期待奥兰多的TechEd 2012!如果可能的话,我将继续为大家分享关于奥兰多TechEd 2012 的现场见闻! 转载于:https://blog.51cto.com/suhua/845796

【常见CPU架构对比】维基百科
Comparison of instruction set architectures https://en.wikipedia.org/wiki/Comparison_of_instruction_set_architectures转载于:https://www.cnblogs.com/timeObjserver/p/9441242.html
Python基础学习1(Python的Windows和Linux的安装及简单学习)
一Python的安装 1.Windows下安装Python (1)windows 命令行的几个常见的命令 dir:查看当前目录下的所有文件,以及目录 cd NAME:进入到NAME目录下(tab键自动补全) D: 切换到D盘 type NUL…
Python Tutorial(十):浏览标准库(一)
10.1 操作系统接口 os模块提供很多函数用于和操作系统的交互: 确定使用import os风格而不是from os import *。这将避免os.open()被内建的open()函数遮住,它的操作截然不同。 内建的函数dir()和help()作为交互助手对于大的模块像os是非常有用的ÿ…

学业水平考试b能上985吗_河南单招哪些学院好考?哪些专业能录取?
高职单招的录取规则是什么?在符合报考条件的前提下,考试是由两部分组成:文化素质评价职业适应性测试、职业技能测试。文化素质评价大多院校采用学业水平考试等级成绩折合一定的分值计入。有些学校采用现场考试语数外三门,以实际成绩计入。职…

单例模式Java实现
为什么80%的码农都做不了架构师?>>> public class Singleton {private static Singleton instance null;// 同步时加锁的静态对象private static final Object OL new Object();private Singleton() {// Class initialize}/** 在多线程环境下执行时的…

Go环境搭建、Sublime Text 3 安装Go语言相关插件gosublime
Go 语言环境安装 1.brew install go 默认安装,被安装了/usr/local/Cellar/go 目录并自设置了环境变量。 2.go env 可查看目前的go的环境变量 3.配置一个GOPATH环境变量,是工作目录。 根据约定,GOPATH下需要建立3个目录: bin 存储编…

ABAP性能实例七例
一、SQL Interface 1.Select ... Where vs. Select Check 用Select … Where语句效率比Select Check语句要高,例如: SELECT * FROM SBOOK INTO SBOOK_WA WHERE CARRID LH AND CONNID 0400. ENDSELECT. SELECT * FROM SBOOK INTO SBOOK_WA. CHECK: SB…

C语言中打印‘%’
C语言中打印‘%’不能直接printf("%"),这里的%有特殊含义的,要想打印的话,需要输入printf("%%"),两个%才可以将它打印出来。C语言中的其他的特殊字符,以后再慢慢做整理。

vba 字体颜色_多掌握一些VBA语句,让自己书写代码更加顺畅
VBA 是好东西,对于身在职场的人员,或者是积极打拼的创业者,是数据分析的首选,他可以实现量身定做,解决一些规律性强的问题。或者代替人处理一些可以描述出有逻辑关系的数据分析。多掌握一些VBA语句,让自己书…

编写jQueryUI插件(widget)
使用jQueryUI的widget来写插件,相比于基本的jquery插件有一些好处: * 方便实现继承,代码重用 * 默认是单例 * widget已经给你实现好的一些常用方法,例如destroy 带来好处的同时也带来了荆棘和陷阱,本文的目的就是梳理这…

mail 发送email
(一)首先安装ssmpt和mailutils: sudo apt-get install ssmtp mailutils (二)接下来编辑配置文件sudo gedit /etc/ssmtp/ssmtp.conf rootYOUR_PERSONAL_MAILDOMAIN mailhubsmtp.gmail.com:465 rewriteDomaingmail.com A…

C语言中字符型在计算机中的存储
一. 字符型的分类和表示范围 char:是有符号还是无符号数视编译器而定,一般为有符号数,下文把它全部当成有符号数进行讨论 表示范围:32位和64位机器上均是一个字节,所以是八个bit位,最高位为符号位之后&…

python中正确的表达式_python中如何正确使用正则表达式的详细模式(Verbose mode expression)...
简单介绍正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大。得益于这一点,在提供了正则表达式的语言里,…

ASP.NET中 RequiredFieldValidator(非空验证)的使用
ylbtech-ASP.NET-Control-Validator: RequiredFieldValidator(非空验证)的使用ASP.NET中 RequiredFieldValidator(非空验证)的使用。 1.A,运行效果返回顶部 登录 RequiredFieldValidator:非空验证重要的属性:1,ControlToValidate:要验证的控件…

5013.FortiGate企业级硬件防火墙Demo演示文档
FortiGate企业级硬件防火墙Demo演示文档 语言:英文类型:Demo大小:2MB格式:WEB摘要:和真实的硬件防火墙操作界面一模一样的,非常实用!可以通过这些界面了解到在配置硬件防火墙时需要配置哪些参数…

下拉列表JComboBox,列表框JList
1、下拉列表JComboBox public class Demo extends JFrame {public Demo() {setBounds(100, 100, 200, 100);setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);Container c getContentPane();c.setLayout(new FlowLayout()); // JComboBox cbbnew JComboBox();…

C语言中整型在计算机中的存储
一 . 整型的表示 1.字面值后面加上L(l)表示long长整型 2.字面值后面加上U(u)表示usigned整型值 3.十进制123 ... 4.八进制,以0开头,如0123,0754 ... 5.十六进制,以0x开头,如0xF32 ... 二 .整型的分类和表示范围 ch…

多个前端项目放在一个git好还是_前端工作流
没有规矩不成方圆,如果一个项目只有你一个人在维护,那么你不需要担心很多问题,因为你对它心知肚明,但同时一个人的力量无法支撑起来大型项目。更多时候,我们需要与其他人合作,共同把项目推进,这…

hadoop上的pageRank算法
简单的pageRank实现参考:http://wlh0706-163-com.iteye.com/blog/1397694 较为复杂的PR值计算以及在hadoop上的实现:http://deathspeeder.is-programmer.com/posts/31349.html pageRank算法的基本思想是:网页的热门程度依赖指向它的网页的热门…

【11平台天梯】【原理分析】11平台天梯原理分析
写作缘由 (Elo Ratings) ELO排名制度是当今对弈水平评估的公认的权威方法。它最初由物理学教授 Arpad Elo 创立,故命名为埃罗排名。埃罗排名最早应用于国际象棋和围棋,目前已广泛用于国际象棋、围棋、足球、篮球等运动。ELO算法先是在网游WOW取得了成功&…
PAT Basic 1072
1072 开学寄语 下图是上海某校的新学期开学寄语:天将降大任于斯人也,必先删其微博,卸其 QQ,封其电脑,夺其手机,收其 ipad,断其 wifi,使其百无聊赖,然后,净面、…

C语言中浮点型在计算机中的存储
一 . 浮点型的存储 在十进制中我们都学习过科学计数法,比如31.4可以用科学计数法表示就是3.14*10^1。浮点型同样是采取科学计数法进行表示的。在计算机中,以二进制数存储,如1011.10用科学计数法的方式可以写成1.01110*2^3,因为浮点…