`

C语言字符的输入输出原理

 
阅读更多

 

 

例:

 

#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语言字符串练习(习题+答案).zip

    6. 字符串格式化:学习使用printf()和scanf()函数处理字符串输入和输出,以及如何使用sprintf()和sscanf()在内存中操作字符串。 7. 字符串操作:了解strtok()函数分割字符串,以及其它如strpbrk(), strspn(), ...

    C语言输入输出C语言输入输出.docx

    ### C语言中的输入输出知识点详解 #### 输入输出基础概念 在C语言中,输入输出(I/O)操作是非常重要的组成部分,它们允许程序与外部环境(比如用户)进行数据交换。通常,输入是从标准输入设备(如键盘)获取数据...

    C语言基础之转义字符:从原理到应用的字符编码教程 .txt

    提供了多种字符编码和转换的功能,如输入和输出字符的实体、ASCII码、八进制转义字符、十六进制转义字符等,以及支持多个字符的批量转换和显示。本资源适合C语言编码和转换的学习者和工程师使用,帮助他们通过Web...

    编译原理词法分析器源程序C语言实现

    该程序使用了文件输入输出、字符串操作、条件语句、循环语句等C语言的基本语法结构。 4. 重要函数 该程序中有几个重要的函数: * `Isletter` 函数,用于判断一个字符是否为字母。 * `IsDigit` 函数,用于判断一个...

    c语言输入和输出PPT学习教案.pptx

    C语言是一种广泛使用的编程语言,其输入和输出操作是编程的基础。C语言并不直接提供输入输出语句,而是通过函数调用来实现I/O操作。...对于初学者,理解输入输出的原理和函数的工作方式是学习C语言的关键步骤之一。

    C语言字符屏幕函数CHM电子书

    1. 标准输入输出:C语言的标准输入输出库stdio.h包含了处理字符屏幕的基本函数,如printf()用于屏幕输出,scanf()用于从键盘接收输入。它们是C语言编程的基础,理解其工作原理和使用方法是必不可少的。 2. 控制台I/...

    c语言删除字符串中指定的所有字符

    根据提供的文件信息,本文将详细解释“C语言删除字符串中指定的所有字符”的实现方法与原理。此代码示例提供了一种高效的方法来移除字符串中的特定字符,并且已经在Windows和Linux环境下进行了测试验证。 ### 一、...

    c语言字符串_数字转换函数大全

    在C语言中,字符串与数字之间的转换是编程中常见的需求,特别是在处理用户输入或解析文本数据时。这里我们将深入探讨一些关键的C语言转换函数,包括`atof`、`atoi`、`atol`、`strtod`、`strtol`、`strtoul`、`to...

    编译原理词法分析C语言实现实验报告(含源码)

    词法分析器需处理输入的源程序字符串,以'#'字符作为结束标志,并输出单词符号的二元组,结果保存至磁盘文件,同时具备错误处理功能。 二、系统分析 词法分析器依据正则文法进行工作。这里,我们有三个主要的正则...

    高速字符串处理功能的 C 语言源程序.zip_C语言_c语言 字符串

    5. **性能基准测试**:比较原生的C语言字符串函数与这些优化后的函数,验证性能提升。 通过学习和应用这些高速字符串处理方法,你可以在处理大量字符串数据时显著提高程序性能,这对于大数据分析、文本处理、网络...

    C语言入门之输入输出.doc

    《C语言入门之输入输出》 C语言是编程学习的基础,尤其对于理解计算机底层工作原理至关重要。本篇主要探讨C语言中的数据输出,即如何利用函数将数据展示在屏幕上。在C语言中,输入输出主要依赖于库函数,而不是语言...

    c语言 对非格式化输入输出的理解

    非格式化输入输出是C语言中最基础的I/O操作,它们在处理简单的字符输入和输出时非常有用。理解这些函数的工作原理对于编写简单的控制台应用程序至关重要。通过熟练掌握`getchar`、`getche`、`getch`、`getc`、`...

    000000000000000000

    【标题】:C语言输入输出详解 【描述】:本资料详细讲解了C语言中的输入输出功能,重点介绍了scanf函数的使用和注意事项。 【标签】:C语言,输入输出,scanf函数 【正文】: 在C语言编程中,输入输出是程序与用户...

    输入输出:我对C语言中输入输出理论的理解

    输入输出我对C语言中输入输出理论的理解第一次提交:出于各种原因,我于2020年开始学习C.现在,我将证明我对学习计算机科学的深奥原理感兴趣。 经过进一步的调查,我得出结论,从60年代末开始,最初的Unix家族的语言...

    一图归纳C语言中文件的输入输出函数.pdf

    本文通过对C语言中文件输入输出函数进行归纳总结,旨在帮助读者深入理解文件操作的原理,以及各种函数的具体使用方法。 首先,输入和输出的概念在编程中是相对的。从内存的角度看,数据从内存到文件的传输被认为是...

    编译原理C语言词法分析器

    1. **输入缓冲区**:用于存储源代码的字符序列。 2. **状态机**:通过一系列的状态转换来识别词法单元,每个状态对应一种词法规则。 3. **词法单元结构体**:用于保存识别出的词法单元信息,如类型和值。 4. **错误...

    c语言程序设计谭浩强格式输入输出PPT学习教案.pptx

    在进行格式化输入输出时,理解这些函数的工作原理和格式规定字符的含义是至关重要的,这不仅可以帮助程序员有效地控制输入输出的格式,还能避免潜在的错误,如数据类型不匹配或格式字符串错误等。熟练掌握C语言的...

    文法输入输出 编译原理

    根据给定的文件标题、描述、标签以及部分内容,我们可以从中提炼出有关文法输入输出以及编译原理的相关知识点。下面将对这些知识点进行详细的解析。 ### 标题:文法输入输出 编译原理 #### 文法输入输出 文法在...

    C语言打印字符图形

    ### C语言打印字符图形知识点详解 #### 一、基本概念 在C语言中,打印字符图形涉及到使用嵌套循环来创建各种形状的文本图形。这些图形由特定的字符组成,通常用于教学或可视化某些概念。掌握如何在C语言中打印字符...

    处理C语言程序 把路径上的C语言程序编码输出

    本资源是关于处理C语言程序的编译原理作业,主要涉及的是读取C语言源代码文件,并将其内容输出到新的文本文件中。这涉及到的知识点包括: 1. **文件操作**:在C语言中,我们通常使用`stdio.h`库中的函数来读取和...

Global site tag (gtag.js) - Google Analytics