区别cin,scanf,gets,getchar.doc
上传人:sy****28 上传时间:2024-09-13 格式:DOC 页数:4 大小:24KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

区别cin,scanf,gets,getchar.doc

区别cin,scanf,gets,getchar.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

C/C++学习笔记1-深入了解scanf()/getchar()和gets()等函数---------------------------------------------------|问题描述一:(分析scanf()和getchar()读取字符)---------------------------------------------------|scanf(),getchar()等都是标准输入函数,一般人都会觉得这几个函数非常简单,没什么特殊的.但是有时候却就是因为使用这些函数除了问题,却找不出其中的原因.下面先看一个很简单的程序:程序1:#include<stdio.h>intmain(){charch1,ch2;scanf("%c",&ch1);scanf("%c",&ch2);printf("%d%d\n",ch1,ch2);return0;}或者是:或者是:#include<stdio.h>intmain(){charch1,ch2;ch1=getchar();ch2=getchar();printf("%d%d\n",ch1,ch2);return0;}程序的本意很简单,就是从键盘读入两个字符,然后打印出这两个字符的ASCII码值.可是执行程序后会发现除了问题:当从键盘输入一个字符后,就打印出了结果,根本就没有输入第二个字符程序就结束了.例如用户输入字符'a',打印结果是97,10.这是为什么呢?【分析】:首先我们呢看一下输入操作的原理,程序的输入都建有一个缓冲区,即输入缓冲区.一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据.正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入,这就是例子中为什么会出现输入语句失效的原因!其实这里的10恰好是回车符!这是因为scanf()和getchar()函数是从输入流缓冲区中读取值的,而并非从键盘(也就是终端)缓冲区读取.而读取时遇到回车(\n)而结束的,这个\n会一起读入输入流缓冲区的,所以第一次接受输入时取走字符后会留下字符\n,这样第二次的读入函数直接从缓冲区中把\n取走了,显然读取成功了,所以不会再从终端读取!这就是为什么这个程序只执行了一次输入操作就结束的原因!---------------------------------------------------|问题描述二:(分析scanf()和gets()读取字符串)|----------------------------------------------------首先我们看一下scanf()读取字符串的问题:程序2:#include<stdio.h>intmain(){charstr1[20],str2[20];scanf("%s",str1);printf("%s\n",str1);scanf("%s",str2);printf("%s\n",str2);return0;}程序的功能是读入一个字符串输出,在读入一个字符串输出.可我们会发现输入的字符串中不能出现空格,例如:测试一输入:Helloworld!输出:Helloworld!【分析】到此程序执行完毕,不会执行第二次的读取操作!这个问题的原因跟问题一类似,第一次输入Helloworld!后,字符串Helloworld!都会被读到输入缓冲区中,而scanf()函数取数据是遇到回车,空格,TAB就会停止,也就是第一个scanf()会取出"Hello",而"world!"还在缓冲区中,这样第二个scanf会直接取出这些数据,而不会等待从终端输入.测试二:Hello[Enter]Hello[输出]world[Enter]world[输出]【分析】程序执行了两次从键盘读入字符串,说明第一次输入结束时的回车符被丢弃!即:scanf()读取字符串会舍弃最后的回车符!我们再看一下gets()读取字符串的情况:用scanf来读取一个字符串时,字符串中是不可以出现空格的,一旦出现空格,后面的数据就会舍弃残留在缓冲区中.其实有另外一个函数是可以接受空格的,那就是gets(),下面我们看一下这个函数的应用,我们把程序2改动一下:程序3:#include<stdio.h>intmain(){charstr1[20],str2[20]