C语言输入字符和字符串

C语言有多个函数可以从键盘获得用户输入,它们分别是:

  • scanf():和 printf() 类似,scanf() 可以输入多种类型的数据。
  • getchar()、getche()、getch():这三个函数都用于输入单个字符。
  • gets():获取一行数据,并作为字符串处理。


scanf() 是最灵活、最复杂、最常用的输入函数,

输入单个字符

输入单个字符当然可以使用 scanf() 这个通用的输入函数,对应的格式控制符为%c,上节已经讲到了。本节我们重点讲解的是 getchar()、getche() 和 getch() 这三个专用的字符输入函数,它们具有某些 scanf() 没有的特性,是 scanf() 不能代替的。

1) getchar()

最容易理解的字符输入函数是 getchar(),它就是scanf("%c", c)的替代品,除了更加简洁,没有其它优势了;或者说,getchar() 就是 scanf() 的一个简化版本。

下面的代码演示了 getchar() 的用法:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. char c;
  5. c = getchar();
  6. printf("c: %c\n", c);
  7. return 0;
  8. }

输入示例:

@
c: @

你也可以将第 4、5 行的语句合并为一个,从而写作:

char c = getchar();

2) getche()

getche() 就比较有意思了,它没有缓冲区,输入一个字符后会立即读取,不用等待用户按下回车键,这是它和 scanf()、getchar() 的最大区别。请看下面的代码:

  1. #include <stdio.h>
  2. #include <conio.h>
  3. int main()
  4. {
  5. char c = getche();
  6. printf("c: %c\n", c);
  7. return 0;
  8. }

输入示例:

@c: @

输入@后,getche() 立即读取完毕,接着继续执行 printf() 将字符输出,所以没有按下回车键程序就运行结束了。

注意,getche() 位于 conio.h 头文件中,而这个头文件是 Windows 特有的,Linux 和 Mac OS 下没有包含该头文件。换句话说,getche() 并不是标准函数,默认只能在 Windows 下使用,不能在 Linux 和 Mac OS 下使用。

3) getch()

getch() 也没有缓冲区,输入一个字符后会立即读取,不用按下回车键,这一点和 getche() 相同。getch() 的特别之处是它没有回显,看不到输入的字符。所谓回显,就是在控制台上显示出用户输入的字符;没有回显,就不会显示用户输入的字符,就好像根本没有输入一样。

回显在大部分情况下是有必要的,它能够与用户及时交互,让用户清楚地看到自己输入的内容。但在某些特殊情况下,我们却不希望有回显,例如输入密码,有回显是非常危险的,容易被偷窥。

getch() 使用举例:

  1. #include <stdio.h>
  2. #include <conio.h>
  3. int main()
  4. {
  5. char c = getch();
  6. printf("c: %c\n", c);
  7. return 0;
  8. }

输入@后,getch() 会立即读取完毕,接着继续执行 printf() 将字符输出。但是由于 getch() 没有回显,看不到输入的@字符,所以控制台上最终显示的内容为c: @

注意,和 getche() 一样,getch() 也位于 conio.h 头文件中,也不是标准函数,默认只能在 Windows 下使用,不能在 Linux 和 Mac OS 下使用。

对三个函数的总结

函数 缓冲区 头文件 回显 适用平台
getchar() stdio.h Windows、Linux、Mac OS 等所有平台
getche() conio.h Windows
getch() conio.h Windows

输入字符串

输入字符串当然可以使用 scanf() 这个通用的输入函数,对应的格式控制符为%s,上节已经讲到了;本节我们重点讲解的是 gets() 这个专用的字符串输入函数,它拥有一个 scanf() 不具备的特性。

gets() 的使用也很简单,请看下面的代码:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. char author[30], lang[30], url[30];
  5. gets(author);
  6. printf("author: %s\n", author);
  7. gets(lang);
  8. printf("lang: %s\n", lang);
  9. gets(url);
  10. printf("url: %s\n", url);
  11. return 0;
  12. }

运行结果:

YanChangSheng
author: YanChangSheng
C-Language
lang: C-Language
http://c.biancheng.net http://biancheng.net
url: http://c.biancheng.net http://biancheng.net

gets() 是有缓冲区的,每次按下回车键,就代表当前输入结束了,gets() 开始从缓冲区中读取内容,这一点和 scanf() 是一样的。gets() 和 scanf() 的主要区别是:

  • scanf() 读取字符串时以空格为分隔,遇到空格就认为当前字符串结束了,所以无法读取含有空格的字符串。
  • gets() 认为空格也是字符串的一部分,只有遇到回车键时才认为字符串输入结束,所以,不管输入了多少个空格,只要不按下回车键,对 gets() 来说就是一个完整的字符串。

也就是说,gets() 能读取含有空格的字符串,而 scanf() 不能。

总结

C语言中常用的从控制台读取数据的函数有五个,它们分别是 scanf()、getchar()、getche()、getch() 和 gets()。其中 scanf()、getchar()、gets() 是标准函数,适用于所有平台;getche() 和 getch() 不是标准函数,只能用于 Windows。

scanf() 是通用的输入函数,它可以读取多种类型的数据。

getchar()、getche() 和 getch() 是专用的字符输入函数,它们在缓冲区和回显方面与 scanf() 有着不同的特性,是 scanf() 不能替代的。

gets() 是专用的字符串输入函数,与 scanf() 相比,gets() 的主要优势是可以读取含有空格的字符串。

scanf() 可以一次性读取多份类型相同或者不同的数据,getchar()、getche()、getch() 和 gets() 每次只能读取一份特定类型的数据,不能一次性读取多份数据。

转自 - http://c.biancheng.net/view/1796.html

原文地址:https://www.cnblogs.com/kyrie211/p/11140509.html

时间: 2024-10-03 17:00:56

C语言输入字符和字符串的相关文章

C语言之字符与字符串

字符和字符串 字符是一个字母.数字.标点或其他诸如此类的符号:字符串是任何字符序列. 字符串用于存储由字母.数字.标点和其他符号组成的文本数据. C语言使用char数据类型老存储字符.char是一种整型数值类型. C语言存储字符的方式:在计算机内存中,所有的数据都是以数值方式存储的. 字符并不能直接存储,但是每个字符都有对应的数值编码. 这种编码被称为ASCII码或ASCII字符集. 在这种编码中,每个大小写字母.数字.标点和其他符号都对应于一个0~255值. <span style="f

C语言-输入任意个字符串

来源网站: ==== http://bbs.csdn.net/topics/391045349?page=1#post-399279449 方法一: //输入任意个字符串 #include <stdio.h> #include <stdlib.h> #include <string.h> #define LINE 5 int main() { int i = 0, n = LINE; int l, len; char **str; char buf[256]; //每个

Java 读取输入字符和字符串

1. 使用Scanner读取字符和字符串 3 /** 4 * Created by SheepCore on 2020-2-26 5 */ 7 public class Main { 8 public static void main(String[] args) { 9 Scanner scan = new Scanner(System.in); //声明一个Scanner对象,初始输入流为控制台 10 String name = scan.nextLine(); //读取键盘输入字符串(包括

一起talk C栗子吧(第一百七十九回:C语言实例--字符和字符串输出函数二)

各位看官们,大家好,上一回中咱们说的是字符和字符串输出函数的例子,这一回咱们继续说该例子.闲 话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们在上一回中介绍了字符和字符串输出函数的用法,満篇都是理论,古语云:纸上得来终觉浅,绝知此事要躬行.这一回中我们要把这些纸上得来理论应用于实践中,让我们一起动手去实践吧. 接下来,我们将通过具体的代码来说明如何使用字符输出函数,以及使用时的注意事项: int main() { char ch = 'a'; char *str = "hello

C语言中字符型和字符串型的区别?

C语言中只有字符型类型,没有字符串型类型.字符类型用一个带符号的8位二进制编码表示,其性质与int相同,只是只有一个字节.表示字符的ASCII编码使用其中的0~127,所以要明白字符类型(char)其实是一个一字节整型,并不只用来表示字符.由于C中没有字符串类型,所以在处理字符串时是利用字符型数组来实现的,在字符型数组中一个接一个地存储字符的ASCII编码,并在最后一个字符后加一个'\0'表示这一串字符结束了,就形成所谓“字符串”.

C语言的字符与字符串处理函数

字符处理有两类函数:分类与转换.分类函数的名称以is开头,转换函数的名称以to开头,一般在ctype.h头文件中声明.宽字符处理也有分类与转换函数之分,这些函数的名称以isw和tow开头,还有通用的分类与转换函数,wctrans和towctrans,这些函数都在头文件wctype.h中定义. 习惯上,C语言中的字符串是以null字符('\0')结尾的字符数组.C89增补1增加了与普通字符串函数并行的宽字符串函数,差别在于宽字符串函数所带的参数类型为wchar_t*而不是char*,宽字符串函数名

Pascal语言中字符与字符串

[题目]输入一段文章(255个字符以内),求文章中单词的个数,相同单词只记一次,The 和 the 视作相同. [敲代码] //网友代码 var article,w:string; arr:array[1..255] of string; i,len,ans:longint; function check(w:string):boolean; var i:longint; begin if len=0 then exit(true); for i:=1 to len do if arr[i]=w

18 Java语言基础字符和字符串参与运算

结论 任何数据类型用+与字符串相连接都会产生新的字符串 1 public class Test1_DataTypeConversion { 2 3 public static void main(String[] args) { 4 5 System.out.println('a'+1); //结果为98 6 System.out.println((char)('a'+1)); // 结果为b 7 System.out.println("hello" + 'a' + 1); // 结果

c语言实现字符指针(字符串)数组的排序

需求: "ff555d", "114ddd", "114dd","aaa", "aaab", "aaa" d对它们进行排序 头文件: #include<stdlib.h> #include<stdio.h> #include<string.h> 函数原型: void printArray(char **buff,int len); void sortB