getchar() getch() getche() gets() puts() scanf()的用法及区别

getchar() putchar(ch) scanf()   头文件stdio.h

getch() getche()   头文件conio.h

gets() puts()    头文件stdio.h



getch()和getche()函数 都是从键盘上读入一个字符,但getch()函数不将读入的字符回显在显示屏幕上,而getche() 函数却将读入的字符回显到显示屏幕上。

而getchar()函数与上述两个函数的区别是:需等待输入直到按回车才结束, 回车前的所有输入字符都会逐个显示在屏幕上,但只有第一个字符作为函数的返回值。

getchar()   所在头文件 stdio.h

原型: int getchar(void); // 是stdio.h中的库函数,返回的是一个int型的数

作用是从stdin流中读入一个字符,也就是说,如果stdin有数据的话不用输入它就可以直接读取了,第一次getchar()时,确实需要人工的输入,但是如果你输了多个字符,以后的getchar()再执行时就会直接从缓冲区中读取了

有一个int型的返回值.当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中,直到用户按回车为止(回车字符也放在缓冲区中).当用户键入回车之后,getchar才开始从stdio流中每次读入一个字符.getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1.

若用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取.注意:已在键盘缓冲区的字符,不用等待用户按回车键就会调用getchar直到缓冲区中的字符读完为后,才等待用户按键.

键盘输入的字符都存到缓冲区内,一旦键入回车,getchar就进入缓冲区读取字符,一次只返回第一个字符作为getchar函数的值,如果有循环或足够多的getchar语句,就会依次读出缓冲区内的所有字符直到‘\n‘.要理解这一点,之所以你输入的一系列字符被依次读出来,是因为循环的作用使得反复利用getchar在缓冲区里读取字符,而不是getchar可以读取多个字符,事实上getchar每次只能读取一个字符

ch=getchar(); //等待从键盘上输入一个字符
putchar(ch); //输出此字符

#include <stdio.h>
int main()
{
int c;
while ((c = getchar()) != ‘\n‘) //不断循环调用getchar直至用户键入回车(即换行)
printf("%c", c);
return 0;
}

结果



getch() 非标准函数,要注意移植性 所在头文件:conio.h

是一个不回显函数,当用户按下某个字符时,函数自动读取,无需按回车,有的C语言命令行程序会用到此函数做游戏,

函数原型:int getch(void); //从控制台读取一个字符,但不显示在屏幕上

char ch;或int ch;

_getch();或ch=_getch();

用_getch();会等待你按下任意键,再继续执行下面的语句;

用ch=_getch();会等待你按下任意键之后,把该键字符所对应的ASCII码赋给ch,再执行下面的语句。

#include<stdio.h>
#include<conio.h>
int main()
{
    char c;
    while((c=getch())!=‘\r‘) { //每接收到用户键入的一个字符则输出一个*直到按下了回车键
        printf("*");
    }
    return 0;
}

结果:

 getche() 功能:输入后立即从控制台取字符,不以回车为结束(带回显)

原型:int getche(void);  //所在头文件:conio.h  返回值:输入字符对应的ASCII码

#include<stdio.h>
#include<conio.h>
int main(void)
{
    char ch;
    printf("please input a character:");
    ch=getche();
    printf("\nyou have input a character ‘%c‘\n",ch);
    return 0;
}

结果: 可见,1、带回显 2、一旦输入一个字符则立刻回从控制台读取

getch()和getche()函数的区别:

#include <stdio.h>
#include <conio.h>
int main()
{
    char c, ch;
    c=getch(); //从键盘上读入一个字符不回显送给字符变量c
    putchar(c); //输出该字符
    puts(""); //puts()输出内容并换行
    ch=getche(); //从键盘上带回显的读入一个字符送给字符变量ch
    putchar(ch);
    return 0;
}

针对ch=getche(); 运行结果可见会既回显用户键入的字符,又会立即从控制台取字符并由putchar(ch)输出,所以会看到两个重复的字符



gets()  读一行,从流中读取字符串,直到出现换行符或‘\n‘读到文件尾EOF为止,最后加上‘\0‘作为字符串结束。所读取的字符串暂存在给定的参数string中
原型:char * gets(char * string); //注意只能接收char* 类型,成功则返回char*类型的指针,否则返回NULL

#include <stdio.h>
int main(void)
{
    char str[10];
    printf("Input a string.\n");
    gets(str);
    printf("The string you input is: %s",str);    //输出所有的值,注意a
}

注意:由于gets()不检查字符串string的大小,必须遇到换行符或文件结尾才会结束输入,因此容易造成缓存溢出的安全性问题,导致程序崩溃,可以使用fgets()代替

如果输入123456(长度小于10),则输出结果为:
Input a string.
123456
The string you input is:123456

如果输入12345678901234567890(长度大于10),则输出结果为:
Input a string.
12345678901234567890
The string you input is:12345678901234567890
同时看到系统提示程序已经崩溃。

scanf()  头文件:stdio.h

原型:scanf("格式控制字符串",变量地址列表);

接受字符串时:scanf("%s",字符数组名或指针); 即第二个参数只能是字符指针,若接受int类型的数组,则需不断循环,每次取数组中的一个数

#include <stdio.h>
int main()
{
    int arr[5];
    for(int i=0; i<5; ++i) {
        scanf("%d",&arr[i]); //注意scanf的第一个参数里,除了以%开始的格式控制之外,最好不要加任何其他字符,像是空格、tab等
    }
    /*
    //也可以用C++11特性等效替换
    for(auto& elem : arr){
        scanf("%d",&elem);
    }
    */
    for(int j=0;j<5; ++j) {
        printf("%d ",arr[j]);
    }
    return 0;
}    

注意:scanf的第一个参数里,除了以%开始的格式控制之外,最好不要加任何其他字符,像是空格、tab等,因为用户在输入的时候加空格,tab或换行都可以识别的,而不是与scanf中的格式控制保持一致。

puts() 函数用来向标准输出设备(屏幕)写字符串并换行,其调用方式为,puts(s);其中s为字符串字符(字符串数组名或字符串指针),注意:puts输出字符串时要遇到‘\0(即字符结束符)才停止

原型:

int puts(const char *string);

如puts("*******************************");

时间: 2024-11-07 08:51:37

getchar() getch() getche() gets() puts() scanf()的用法及区别的相关文章

区分getchar(),getch(),getche()三个函数:

区分getchar(),getch(),getche()三个函数: 第一行是手动输入的,第二行是printf输出的. getch()和getche()这两个函数使用时要包含conio.h头文件: getch()函数,也是接收键盘输入的一个字符,但不用回车确认! getche函数,同样接收一个字符,不需要回车确认!但输入时明文显示(回显). 以上三个函数,请大家亲自上机即可理解,有问题随时留言!欢迎大家提问! 原文地址:https://www.cnblogs.com/Xiangzhong-com/

C的printf与scanf的用法

之前没学过C语言,只学过C++,所以就来自学下C语言了,其实个人认为C与C++的区别很小,基本上就是printf与scanf这点输出和输入的区别了,如果还有什么区别的话那就是要包含的头文件是不同的.比如在C++中,是#include<iostream>.而在C中是#include<stdio.h> 在调用printf与scanf的时候一定要包含#include<stdio.h> printf的用法是:printf("格式控制字符串",输出参数一,输出

C++中printf和scanf的用法

(一)printf的用法 printf:按格式打印,向控制台输出.print:打印 ,f:formate,格式化. 在使用printf向控制台输出时,不建议使用中文字符串,中文字符串的问题比较复杂,有些编译器对中文字符串不支持.可以使用拼音. \n 换行\t 制表符 %d 表示整数%f 表示浮点数(小数)%lf 表示双精度浮点数%c 表示一个字符%s 表示一个字符串 %03d 表示用3位输出一个整数,不够三位用0补齐 eg:使用%03d 输出3时,printf("a:%03d \n",

scanf,fscanf,sscanf的区别----整理

转自原文 scanf,fscanf,sscanf的区别----整理 scanf 从控制台输入 fscanf 从文件输入 sscanf 从指定字符串输入 1.例:使用scanf函数输入数据. #include<stdio.h> int main() { int a,b,c; printf("输入 a, b, c\n"); scanf("%d,%d,%d", &a, &b, &c); printf("a = %d b = %

javascript中window与document对象、setInterval与setTimeout定时器的用法与区别

一.写在前面 本人前端菜鸟一枚,学习前端不久,学习过程中有很多概念.定义在使用时容易混淆,在此给向我一样刚踏入前端之门的童鞋们归纳一下.今天给大家分享一下js中window与document对象.setInterval与setTimeout定时器的用法与区别.讲得不对的地方,烦请大家指正,还望前辈.大牛多多指教! 二.window对象与document对象的用法和区别 window是全局对象,document是window对象的一个属性它也是一个对象.如图: document对象指的页面这个文档

Linux中yum和apt-get用法及区别

Linux中yum和apt-get用法及区别 一般来说著名的linux系统基本上分两大类: 1.RedHat系列:Redhat.Centos.Fedora等 2.Debian系列:Debian.Ubuntu等 RedHat 系列 1 常见的安装包格式 rpm包,安装rpm包的命令是"rpm -参数" 2 包管理工具  yum 3 支持tar包 Debian系列 1 常见的安装包格式 deb包,安装deb包的命令是"dpkg -参数" 2 包管理工具 apt-get

scanf()与gets()的区别

scanf()与gets()的区别 1.scanf()可以同时接受多个字符串,而gets()一次只能接受一个字符串. #include<stdio.h>int main(){ char s1[100],s2[100]; sacnf("%s%s",s1,s2);//scanf能同时接收多个字符串 gets(s1); gets(s2);//使用gets要分多次接收 return 0;} 2.scanf()可以不能接受带空格的字符串,而gets()能接受带空格的字符串. 3.sc

PHP基础温习之echo print printf sprintf print_r var_dump的用法与区别

原文:PHP基础温习之echo print printf sprintf print_r var_dump的用法与区别 一.echoecho() 实际上不是一个函数,是php语句,因此您无需对其使用括号.不过,如果您希望向 echo() 传递一个以上的参数,那么使用括号会发生解析错误.而且echo是返回void的,并不返回值,所以不能使用它来赋值.例子: 复制代码代码如下: <?php $a = echo("55nav"); // 错误!不能用来赋值 echo "55n

jquery.fn.extend与jquery.extend用法与区别

关于jquery.fn.extend与jquery.extend用法与区别. jQuery为开发插件提拱了两个方法,分别是:  代码如下 复制代码 jQuery.fn.extend(object);  和   jQuery.extend(object); jQuery.extend(object); 为扩展jQuery类本身.为类添加新的方法. jQuery.fn.extend(object);给jQuery对象添加方法. fn 是什么东西呢.查看jQuery代码,就不难发现.  代码如下 复制