在C语言中,有两个函数可以让用户从键盘上输入数组数据,它们分别是gets()scanf()。scanf()是通过格式控制符%s输入数组字符串,除了字符串,还能输入其他类型的数据;gets()是直接输入数组字符串,并且只能输入字符串。

但是,scanf()和gets()是有区别的。

scanf()读取字符串时以空格为分隔,遇到空格就认为当前字符串结束了,所以无法读取含有空格的字符串。

gets()认为空格也是字符串的一部分,只有遇到回车键时才认为字符串输入结束,所以,不管输入了多少个空格,只要不按下回车键,对 gets() 来说就是一个完整的字符串。换句话说,gets() 用来读取一整行字符串。
举个例子:

#include <stdio.h>int main(){char str1[30] = {0};char str2[30] = {0};char str3[30] = {0};//gets() 用法printf("Input a string: ");gets(str1);//scanf() 用法printf("Input a string: ");scanf("%s", str2);scanf("%s", str3);//分别输出printf("\nstr1: %s\n", str1);printf("str2: %s\n", str2);printf("str3: %s\n", str3);return 0;}

运行结果:

Input a string: C C++ Java PythonInput a string: PHP JavaScriptstr1: C C++ Java Pythonstr2: PHPstr3: JavaScript

第一次输入的字符串被 gets() 全部读取,并存入 str1 中。第二次输入的字符串,前半部分被第一个 scanf() 读取并存入 str2 中,后半部分被第二个 scanf() 读取并存入 str3 中。
注意,scanf() 在读取数据时需要的是数据的地址,这一点是恒定不变的,所以对于 int、char、float 等类型的变量都要在前边添加&以获取它们的地址。但是在本段代码中,我们只给出了字符串的名字,却没有在前边添加&,这是为什么呢?因为字符串名字或者数组名字在使用的过程中一般都会转换为地址,所以再添加&就是多此一举,甚至会导致错误了。
就目前学到的知识而言,int、char、float 等类型的变量用于 scanf() 时都要在前面添加&,而数组或者字符串用于 scanf() 时不用添加&,它们本身就会转换为地址。读者一定要谨记这一点。
至于数组名字(字符串名字)和地址的转换细节,以及数组名字什么时候会转换为地址。

更多相关文章

  1. 字符串赋值是什么意思
  2. c语言数组中以列优先对吗
  3. c++如何实现字符串分割函数split?(代码示例)
  4. 深入了解数组、List和ArrayList的区别
  5. c语言字符串结束标志是什么
  6. c语言怎么删除字符串中相同字符
  7. c++如何从函数返回数组
  8. c语言数组求和的方法
  9. c++怎么将字符串转数字

随机推荐

  1. Android MMS,SMS之常用Uri
  2. Android SDK 下载 链接
  3. Android获取视频音频的时长的方法
  4. android如何调用显示和隐藏系统默认的输
  5. Android的一些小问题处理
  6. Android API 中文 (42) —— ListView
  7. Android开源项目第二篇——工具库篇
  8. android中的TextView滾動條的設置
  9. Android剪裁图片简单的方法
  10. android之HttpPost&HttpGet使用方法介绍