- 浏览: 283151 次
- 性别:
文章分类
最新评论
例:
#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 616把结构体保存到文件中,用fwrite()函数: fwrite ... -
关于socket编程中基本函数介绍
2012-11-03 13:57 1032源自:http://blog.sina.com.cn/s/bl ... -
C中需要注意的小问题
2012-09-27 08:59 8131.在用scanf()函数读入double型数值时要用%lf的 ... -
指针和多维数组
2011-12-26 10:03 813摘自:《C primer plus》 指针和多位数组 ... -
C中<ctype.h>库
2011-12-19 20:21 718标准库<ctype.h> 1 ... -
C中double类型数据的输入和输出
2011-12-19 10:04 12393double a; scanf(" ... -
C中printf()和scanf()函数说明
2011-12-16 19:58 1589下面是对printf()和scanf()函数的说明: ... -
C中转义序列及其含义
2011-12-15 20:27 973转义序列: 序列 ... -
C中各数据类型取值范围
2011-12-15 19:31 13891.标准头文件<limits.h>中包含了 ... -
C中常用的类型转换函数
2011-12-14 17:34 816源自:http://hi.baidu.com/hao_%BF% ... -
C语言格式化输出系统时间
2011-12-14 17:04 5932源自:http://blog.csdn.net/jiadeli ... -
C中目标代码文件,可执行文件和库
2011-12-14 10:19 1955C编程的基本策略是使用程序将源代码文件转换为可执行 ... -
vs2008下vc的库函数及头文件存放位置
2011-12-13 22:14 4570在写C/C++程序时总会在开头包含一些头文件,如:#inclu ... -
malloc()函数
2011-12-12 17:35 0待写 -
用C写的模拟掷骰子程序
2011-12-12 16:47 2345整理自:《C Primer Plus》第五版 此程序包 ... -
C中字符串的输入输出及相关函数
2011-12-27 21:59 3842//本节内容摘自对Stephen Prata的《C Prime ... -
指针的基本操作以及关于指针的注意事项
2011-12-11 17:42 916一. 指针的基本操作有:赋值(assignment),求值(v ... -
关于*与++的优先级
2011-12-11 16:53 1723C中一元运算符*和++具有相等的优先级,但它们在结合时是从右向 ... -
C中关于数组参数的传递
2011-12-09 11:43 921编写一个对数组进行操作的函数,目的是返回数组内所用元素的和。 ... -
C中有关数组的说明
2011-12-09 11:10 788下面介绍一下关于数组的一些说明: 在数组声明时必须 ...
相关推荐
6. 字符串格式化:学习使用printf()和scanf()函数处理字符串输入和输出,以及如何使用sprintf()和sscanf()在内存中操作字符串。 7. 字符串操作:了解strtok()函数分割字符串,以及其它如strpbrk(), strspn(), ...
### C语言中的输入输出知识点详解 #### 输入输出基础概念 在C语言中,输入输出(I/O)操作是非常重要的组成部分,它们允许程序与外部环境(比如用户)进行数据交换。通常,输入是从标准输入设备(如键盘)获取数据...
提供了多种字符编码和转换的功能,如输入和输出字符的实体、ASCII码、八进制转义字符、十六进制转义字符等,以及支持多个字符的批量转换和显示。本资源适合C语言编码和转换的学习者和工程师使用,帮助他们通过Web...
该程序使用了文件输入输出、字符串操作、条件语句、循环语句等C语言的基本语法结构。 4. 重要函数 该程序中有几个重要的函数: * `Isletter` 函数,用于判断一个字符是否为字母。 * `IsDigit` 函数,用于判断一个...
C语言是一种广泛使用的编程语言,其输入和输出操作是编程的基础。C语言并不直接提供输入输出语句,而是通过函数调用来实现I/O操作。...对于初学者,理解输入输出的原理和函数的工作方式是学习C语言的关键步骤之一。
1. 标准输入输出:C语言的标准输入输出库stdio.h包含了处理字符屏幕的基本函数,如printf()用于屏幕输出,scanf()用于从键盘接收输入。它们是C语言编程的基础,理解其工作原理和使用方法是必不可少的。 2. 控制台I/...
根据提供的文件信息,本文将详细解释“C语言删除字符串中指定的所有字符”的实现方法与原理。此代码示例提供了一种高效的方法来移除字符串中的特定字符,并且已经在Windows和Linux环境下进行了测试验证。 ### 一、...
在C语言中,字符串与数字之间的转换是编程中常见的需求,特别是在处理用户输入或解析文本数据时。这里我们将深入探讨一些关键的C语言转换函数,包括`atof`、`atoi`、`atol`、`strtod`、`strtol`、`strtoul`、`to...
词法分析器需处理输入的源程序字符串,以'#'字符作为结束标志,并输出单词符号的二元组,结果保存至磁盘文件,同时具备错误处理功能。 二、系统分析 词法分析器依据正则文法进行工作。这里,我们有三个主要的正则...
5. **性能基准测试**:比较原生的C语言字符串函数与这些优化后的函数,验证性能提升。 通过学习和应用这些高速字符串处理方法,你可以在处理大量字符串数据时显著提高程序性能,这对于大数据分析、文本处理、网络...
《C语言入门之输入输出》 C语言是编程学习的基础,尤其对于理解计算机底层工作原理至关重要。本篇主要探讨C语言中的数据输出,即如何利用函数将数据展示在屏幕上。在C语言中,输入输出主要依赖于库函数,而不是语言...
非格式化输入输出是C语言中最基础的I/O操作,它们在处理简单的字符输入和输出时非常有用。理解这些函数的工作原理对于编写简单的控制台应用程序至关重要。通过熟练掌握`getchar`、`getche`、`getch`、`getc`、`...
【标题】:C语言输入输出详解 【描述】:本资料详细讲解了C语言中的输入输出功能,重点介绍了scanf函数的使用和注意事项。 【标签】:C语言,输入输出,scanf函数 【正文】: 在C语言编程中,输入输出是程序与用户...
输入输出我对C语言中输入输出理论的理解第一次提交:出于各种原因,我于2020年开始学习C.现在,我将证明我对学习计算机科学的深奥原理感兴趣。 经过进一步的调查,我得出结论,从60年代末开始,最初的Unix家族的语言...
本文通过对C语言中文件输入输出函数进行归纳总结,旨在帮助读者深入理解文件操作的原理,以及各种函数的具体使用方法。 首先,输入和输出的概念在编程中是相对的。从内存的角度看,数据从内存到文件的传输被认为是...
1. **输入缓冲区**:用于存储源代码的字符序列。 2. **状态机**:通过一系列的状态转换来识别词法单元,每个状态对应一种词法规则。 3. **词法单元结构体**:用于保存识别出的词法单元信息,如类型和值。 4. **错误...
在进行格式化输入输出时,理解这些函数的工作原理和格式规定字符的含义是至关重要的,这不仅可以帮助程序员有效地控制输入输出的格式,还能避免潜在的错误,如数据类型不匹配或格式字符串错误等。熟练掌握C语言的...
根据给定的文件标题、描述、标签以及部分内容,我们可以从中提炼出有关文法输入输出以及编译原理的相关知识点。下面将对这些知识点进行详细的解析。 ### 标题:文法输入输出 编译原理 #### 文法输入输出 文法在...
### C语言打印字符图形知识点详解 #### 一、基本概念 在C语言中,打印字符图形涉及到使用嵌套循环来创建各种形状的文本图形。这些图形由特定的字符组成,通常用于教学或可视化某些概念。掌握如何在C语言中打印字符...
本资源是关于处理C语言程序的编译原理作业,主要涉及的是读取C语言源代码文件,并将其内容输出到新的文本文件中。这涉及到的知识点包括: 1. **文件操作**:在C语言中,我们通常使用`stdio.h`库中的函数来读取和...