- 浏览: 278491 次
- 性别:
文章分类
最新评论
例:
#include<stdio.h> int main(void) { char ch; while((ch = getchar()) != '#') putchar(); return 0; }
在这个程序中,运行情况如下:
hello,world [Enter] -->输入"hello,world"后输入Enter键
hello,world -->自动打印
this is a test![Enter] -->输入"this is a test!"后输入Enter键
this is a test! -->自动打印
为什么会是在输入Enter键之后才执行putchar()打印,而不是输入一个字符就打印一个字符(类似与hheelloo,,wwoorrlldd形式)的呢?
这是因为在大多数操作系统上是延迟回显,在这种情况下您所键入的字符被收集并存储在一个缓冲区中,按下回车键后会把缓冲区中所有的
字符一起输出(并把缓冲区清空)。(有的操作系统是立即回显,即没有缓冲区,输入一个字符,显示一个字符)
注意:
许多程序使用getchar()来逐个字符的读取输入。通常,系统使用行缓冲 输入(line-buffered input),这意味着输入的内容在您按下回车
键时被传输给程序。按下回车键的同时还将传输一个编程时需要注意的换行字符。ANSI C把缓冲输入作为标准。
在使用scanf()函数进行输入时:
1. 对于scanf("%d",&input)形式,scanf()函数处理的方式是这样的:
例:假如输入的数据是如下形式: 12c[Enter] //[Enter是回车键]
输入缓冲区中的所有字符在缓冲区的排列如下:
' ' | ' ' | 1 | 2 | c | \n |
按下回车键后,scanf()函数开始每次读取一个输入字符,它跳过空白字符(空格,制表符和换行符)直到遇到一个非空白字符。因为他试图读取一个整数,所以scanf()期望发现一个数字 字符或者一个符号(+或者-).
如果遇到了一个非数字的字符,他就得出结论:已读到了整数的尾部。scanf()把这个非数字字符放回输入缓冲区。这就意味着当程序下一次开始读取输入时,它将从前面被放弃的那个非 数字字符开始。最后,scanf()计算读取到的数字的相应数值,并将该值放到指定的变量中。
如果第一个非空白字符不是数字,将会发生什么呢?比如说,是A而非一个数字?这时scanf()会停在那里,并把A(或者不管什么)放回输入。没有把任何值赋给指定的变量,程序下一次 读取输入时,它就在A处重新开始。如果程序中只有%d这个说明符,scanf()永远也不会越过那个A去读下一个。而且,如果您使用带有多个说明符的scanf()语句,ANSI C 要求函数在第一 个出错的地方停止读入输入。
2.对于scanf("%s",&input)形式,scanf()函数处理的方式是这样的:
如果使用%s说明符,那么空白字符(空格,回车,制表符)以外的所有字符都是可接受的,所以scanf()跳过空白字符直到遇到第一个非空白字符,然后保存再次遇到空白字符之前的所有非空白字符.这就 意味着%s 是scanf()读取一个单词,也就是说,一个不包含空白字符的字符串。如果使用字段宽度,scanf()在字段的结尾或者第一个空白字符处停止。不能通过字段宽度使得scanf()用一个%s说明符读取 多于一个字的输入。最后一点:当scanf()把字符串放在一个指定的数值中,他添加终止的'\0'使得数组内容成为一个C字符串。
3.对于scanf("%c",&input)形式,scanf()函数处理的方式是这样的:
如果使用%c说明符,那么所有的输入字符都是平等的。如果下一个输入字符是一个空格或者换行符,将会把这个空格或者换行符赋给指定的变量;不会跳过空白字符。
发表评论
-
C中结构体
2013-01-09 15:47 587把结构体保存到文件中,用fwrite()函数: fwrite ... -
关于socket编程中基本函数介绍
2012-11-03 13:57 990源自:http://blog.sina.com.cn/s/bl ... -
C中需要注意的小问题
2012-09-27 08:59 7781.在用scanf()函数读入double型数值时要用%lf的 ... -
指针和多维数组
2011-12-26 10:03 781摘自:《C primer plus》 指针和多位数组 ... -
C中<ctype.h>库
2011-12-19 20:21 688标准库<ctype.h> 1 ... -
C中double类型数据的输入和输出
2011-12-19 10:04 12334double a; scanf(" ... -
C中printf()和scanf()函数说明
2011-12-16 19:58 1551下面是对printf()和scanf()函数的说明: ... -
C中转义序列及其含义
2011-12-15 20:27 935转义序列: 序列 ... -
C中各数据类型取值范围
2011-12-15 19:31 13601.标准头文件<limits.h>中包含了 ... -
C中常用的类型转换函数
2011-12-14 17:34 780源自:http://hi.baidu.com/hao_%BF% ... -
C语言格式化输出系统时间
2011-12-14 17:04 5891源自:http://blog.csdn.net/jiadeli ... -
C中目标代码文件,可执行文件和库
2011-12-14 10:19 1927C编程的基本策略是使用程序将源代码文件转换为可执行 ... -
vs2008下vc的库函数及头文件存放位置
2011-12-13 22:14 4497在写C/C++程序时总会在开头包含一些头文件,如:#inclu ... -
malloc()函数
2011-12-12 17:35 0待写 -
用C写的模拟掷骰子程序
2011-12-12 16:47 2311整理自:《C Primer Plus》第五版 此程序包 ... -
C中字符串的输入输出及相关函数
2011-12-27 21:59 3816//本节内容摘自对Stephen Prata的《C Prime ... -
指针的基本操作以及关于指针的注意事项
2011-12-11 17:42 892一. 指针的基本操作有:赋值(assignment),求值(v ... -
关于*与++的优先级
2011-12-11 16:53 1650C中一元运算符*和++具有相等的优先级,但它们在结合时是从右向 ... -
C中关于数组参数的传递
2011-12-09 11:43 891编写一个对数组进行操作的函数,目的是返回数组内所用元素的和。 ... -
C中有关数组的说明
2011-12-09 11:10 742下面介绍一下关于数组的一些说明: 在数组声明时必须 ...
相关推荐
提供了多种字符编码和转换的功能,如输入和输出字符的实体、ASCII码、八进制转义字符、十六进制转义字符等,以及支持多个字符的批量转换和显示。本资源适合C语言编码和转换的学习者和工程师使用,帮助他们通过Web...
输入输出我对C语言中输入输出理论的理解第一次提交:出于各种原因,我于2020年开始学习C.现在,我将证明我对学习计算机科学的深奥原理感兴趣。 经过进一步的调查,我得出结论,从60年代末开始,最初的Unix家族的语言...
缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。 原理介绍: 当调用输入函数scanf()时,输入函数会将我们输入的数字输入到输入缓冲区, 而当我们的输入缓冲区有内容时,再次输入将不会被...
(5)编写一个程序实现如下功能:从键盘输入字符(最多为80个),遇到回车键输入结束,将输入的字符串按奇偶位置拆分,奇数位上的字符在前,偶数位上的字符在后,重新组成新的字符串输出,例如输入: ab12cd3456fg,...
第11章 文件的输入输出 第12章 线程与并发 第13章 编译、链接和库 第14章 GUI 编程实践 第15章 综合案例:桌面跨平台高仿Mac版计算器 第16章 综合案例:桌面跨平台的下载工具 第17章 课程总结
用C语言实现了一个简单的预测分析程序。将预测分析表中的推导过程用二维函数指针的形式存储,对于给定的文法能正确推导并给出过程.若不能推导出来,程序会运行错误(暂未做处理)
内容概要:通过手写简化版字母转换源...③C语言的基本语法,如输入输出,函数,变量等。 阅读建议:本资源旨在帮助考生理解字符处理的基本原理和方法,在学习的过程中要注重理解代码逻辑,并通过实践调试来加深理解。
编译原理课程设计之一用编程语言实现词法分析,用C++实现 注释清楚详细,程序风格良好 /*目前实现的功能有: */ /* 0.课程要求的词法分析基本功能 */ /* 1.识别用户定义的初次定义的变量还是已经定义的变量还是错误...
词法分析器的功能是输入源程序,输出单词符号。词法分析器的单词符号常常表示成以下的二元式(单词种别码,单词符号的属性值)。本实验中,采用的是按类来安排种别码的方式。 2、部分单词的BNF表示(可参考教材43页的...
课程:编译原理 实现:编译过程第一步“词法分析代码实现“” 语言:C语言程序 保证能运行 设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。 各种单词符号对应的种别码:(1)关键字 (2)运算符和界...
将文法拓广为G[M] 计算每个字符的FIRST集合 计算每个闭包的项目集以及GO函数 计算分析表的动作函数ACTION和状态转换函数GOTO 输入需分析的语句,根据已知的分析表,对该语句进行语法分析,并输出该分析过程
通过C语言编写一个词法分析器完成输入是字符串(或源程序文本文件),输出是源程序中各单词的字符串、起止位置、词的类别。附带实验报告。
将输入输出的结果以文件的形式保存,并用数据测试结果的正确性。 编译程序完成词法分析功能,扫描输入字符流,产生用于语法分析的词法记号序列。下述文法描述了该词法分析程序: <标识符>--><字母>|<标识符><字母>|...
输入一个文本文件的C语源代码可以识别并输出至一个文本文件中,如下: # 5:界符 include 2:保留字 运算符 stdio.h 1:头文件 > 4:运算符 main 2:保留字 ( 5:界符 ) 5:界符 { 5:界符 char 2:保留字 8888c 0:错误单词 ;...
LR(1)(Left-to-Right, Rightmost ...在每一步中,根据输入字符和当前状态,在ACTION表中查找相应的操作。如果是移进操作,将状态和输入字符压入栈中,并打印当前步骤的状态。如果是归约操作,根据产生式进行出栈操作,
*printf()/*scanf()系列函数,用于输入输出时格式化字符串;exec*()系列函数,用于在程序中执行外部文件(main(int argc,char*argv[])算不算呢,与其说main()也是一个可变参数函数,倒不如说它是exec*()经过封装后的...
编译原理作业。 实验:词法分析 一、实验目的:编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号...
一、 实验目的 调试并完成一个词法分析程序,加深对词法分析...输入:所给文法的源程序字符串。 输出:二元组(syn,token或sum)构成的序列。 其中:syn为单词种别码; token为存放的单词自身字符串; sum为整型常数。
编译原理词法分析程序设计与开发:对输入的字符串形式的源程序按顺序进行扫描,根据源程序的词法规则识别具有独立意义的单词(符号),并输出与其等价的Token序列
51单片机基础应用设计C语言实例(400例)合集: 10-LED循环左移 100-24c02记忆开机次数 101-24c02存储上次使用中状态 102-DS1302 时钟原理 103-DS1302可调时钟 104-DS1302时钟串口自动更新时间 105-1602液晶显示DS...