C语言适于编写系统软件,三维,二维图形和动画它是数值计算的高级语言。那么大家知道是怎样的呢?下面一起来看看!

字符串的输出

在C语言中,输出字符串的函数有两个:

puts******:直接输出字符串,并且只能输出字符串。

printf******:通过格式控制符 %s 输出字符串。除了字符串,printf****** 还能输出其他类型的数据。

这两个函数前面已经讲过了,这里不妨再演示一下,请看下面的代码:

#includeint main******{ int i; char str[] = ""; printf***"%s ", str***; //通过变量输出 printf***"%s ", "; //直接输出 puts***str***; //通过变量输出

puts***"; //直接输出 return 0;}

运行结果:

在 printf****** 函数中使用%s输出字符串时,在变量列表中给出数组名即可,不能写为printf***"%s", str[]***;。

字符串的输入

在C语言中,输入字符串的函数有两个:

scanf******:通过格式控制符 %s 输入字符串。除了字符串,scanf****** 还能输入其他类型的数据。

gets******:直接输入字符串,并且只能输入字符串。

1*** 使用 scanf****** 读取字符串

请先看下面的例子:

#includeint main******{ char str1[30], str2[30]; printf***"Input str1: "***; scanf***"%s", str1***; printf***"Input str2: "***; scanf***"%s", str2***; printf***"str1: %s str2: %s ", str1, str2***; return 0;}

运行结果:

Input str1: c.biancheng.net↙

Input str2: Java Python C-Sharp↙

str1: c.biancheng.net

str2: Java

由于字符数组长度为30,因此输入的字符串长度必须小于30,以留出一个字节用于存放字符串结束标志`\0`。

对程序的说明:

① 我们本来希望将 "Java Python C-Sharp" 赋值给 str2,但是 scanf****** 只读取到 "Java",这是因为 scanf****** 读取到空格时就认为字符串输入结束了,不会继续读取了。请看下面的例子:

#includeint main******{ char str1[20], str2[20], str3[20]; printf***"Input string: "***; scanf***"%s", str1***; scanf***"%s", str2***; scanf***"%s", str3***; printf***"str1: %s str2: %s str3: %s ", str1, str2,

str3***; return 0;}

运行结果:

Input string: Java Python C-Sharp↙

str1: Java

str2: Python

str3: C-Sharp

第一个 scanf****** 读取到 "Java" 后遇到空格,结束读取,将"Python C-Sharp" 留在缓冲区。第二个 scanf****** 直接从缓冲区中读取,不会等待用户输入,读取到 "Python" 后遇到空格,结束读取,将 "C-Sharp" 留在缓冲区。第三个 scanf****** 读取缓冲区中剩下的内容。

关于缓冲区的知识,我们在《C语言缓冲区***缓存***详解》《结合C语言缓冲区谈scanf******函数》两节中已经进行了详细讲解。

② 在《从键盘输入数据》中讲到,scanf 的各个变量前面要加取地址符&,用以获得变量的地址,例如:

int a, b;

scanf***"%d %d", &a, &b***;

但是在本节的示例中,将字符串读入字符数组却没有使用&,例如:

char str1[20], str2[20], str3[20], str4[20];

scanf***"%s %s %s %s",str1, str2, str3, str4***;

这是因为C语言规定,数组名就代表了该数组的地址。整个数组是一块连续的内存单元,如有字符数组char c[10],在内存可表示为:

C语言还规定,数组名所代表的地址为第0个元素的地址,例如char c[10];,c就代表c[0]的地址。第0个元素的地址就是数组的起始地址,称为首地址。也就是说,数组名表示数组的首地址。

设数组c的.首地址为0X2000,也即c[0]地址为0X2000,则数组名c就代表这个地址。因为c已经表示地址,所以在c前面不能再加取地址符&,例如写作scanf***"%s",&c***;是错误的。

有了首地址,有了字符串结束符'\0',就可以在内存中完整定位一个字符串了。例如:

printf***"%s", c***;

printf 函数会根据数组名找到c的首地址,然后逐个输出数组中各个字符直到遇到 '\0' 为止。

int、float、char 类型的变量表示数据本身,数据就保存在变量中;而数组名表示的是数组的首地址,数组保存在其他内存单元,数组名保存的是这块内存的首地址。后面我们会讲解指针,大家将会有更加深刻的理解。

2*** 使用 gets****** 读取字符串

gets 是 get string 的缩写,意思是获取用户从键盘输入的字符串,语法格式为:

gets***arrayName***;

arrayName 为字符数组。从键盘获得的字符串,将保存在 arrayName 中。请看下面的例子:

#includeint main******{ char str1[30], str2[30]; printf***"Input str1: "***; gets***str1***; printf***"Input str2: "***; gets***str2***; printf***"str1: %s str2: %s ", str1, str2***; return 0;}

运行结果:

Input str1: Java Python C-Sharp↙

Input str2: �

str1: Java Python C-Sharp

str2:

可以发现,当输入的字符串中含有空格时,输出仍为全部字符串,这说明 gets****** 函数不会把空格作为输入结束的标志,而只把回车换行作为输入结束的标志,这与 scanf****** 函数是不同的。

总结:如果希望读取的字符串中不包含空格,那么使用 scanf****** 函数;如果希望获取整行字符串,那么使用 gets****** 函数,它能避免空格的截断。

c语言普通字符放哪里,C语言字符串的输入输出相关推荐

  1. C语言1066字符类型统计,C语言编译过程及数据类型

    写在前面 C语言可以称得上是高级语言中的低级语言,接下来一段时间,我会写一下文章关于c语言,把它的神秘面纱一 一揭开.下面主要是c语言的C语言编译过程及数据类型 源文件编译过程 为了使计算机能执行高级 ...

  2. c语言辅音字符怎么表示,C 语言实例 - 判断元音/辅音

    C 语言实例 - 判断元音/辅音 C 语言实例 C 语言实例 判断输入的字母是元音,还是辅音. 英语有26个字母,元音只包括 a.e.i.o.u 这五个字母,其余的都为辅音.y是半元音.半辅音字母,但 ...

  3. c语言有关字符的操作,C语言字符操作总结大全(超详细).doc

    C语言字符串操作总结大全(超详细) 作者: 本篇文章是对C语言字符串操作进行了详细的总结分析,需要的朋友参考下 1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n ...

  4. c语言char字符判断条件,C语言入门 — 字符型char

    本篇文章将会学习字符类型,并会结合 Ascii码对照表进行学习, 首先我们先来看下 #include // 标准输入输出头文件 stdio.h int main(void) // main 函数,vo ...

  5. c语言创建字符树,使用C语言构建基本的二叉树数据结构

    二叉树结构常用的一些初始化代码 #include #include typedef struct Node{ int data; Node *leftchild; Node *rightchild; ...

  6. c语言以字符输出88,C语言88案例完整版

    以下88案例打包下载地址 链接: keketec.club/posts/c065dba1/ ☝️以上复制进浏览器地址,进行下载 案例ex01: 将字符串转换为一个整数 1 题目 函数:fun() 功能 ...

  7. c语言字母字符参与运算,c语言字符串可以参加运算吗?

    最佳答案 可以运算,但字串连接要用函数不能直接用+ 追问: 比如怎么运算?能写一个表达式吗? 追答: 可以,如char *s="123456";char *s1;s1=s+2; / ...

  8. c++语言获得字符长度,c++怎么获取字符串长度?

    C++获取字符串长度 strlen()函数 函数 strlen()是一个常规函数,他接受一个 C-风格字符串作为参数,并返回字符串包含的字符数. 参数必须是字符型指针(char*).当数组名作为参数传 ...

  9. c语言格式字符使用举例,c语言char怎么用

    C语言中char用于定义字符类型变量或字符指针变量,例如"char a;"则定义了变量a是字符类型,"char *a;"则定义了变量a是字符指针类型. C语言中 ...

最新文章

  1. Reddit欲融资3亿美元,由腾讯领投
  2. reactjs三个常用的Hook:State Hook、 Effect Hook、 Ref Hook
  3. BZOJ 1085 [SCOI2005]骑士精神 【A*启发式搜索】
  4. uc3842开关电源电路图_UC3842 的原理及应用详解 (上)
  5. Android - shape圆形画法(oval)
  6. SQL 语句 - Select(6): 字段运算
  7. AD ---- 活动目录的日常管理操作(3)
  8. 阿里巴巴P3C java编程规范(最新版github下载)
  9. excel 多行 取消隐藏_取消隐藏Excel行和列的问题
  10. 开发3dMax插件的方法和应用
  11. windows 安装h2o_H2O-安装
  12. no.4京东话费充值系统架构演讲读后感
  13. 《Steam平台上的VR虚拟现实》(Yanlz+Unity+XR+VR+AR+MR+Steam+SteamVR+Vive+Oculus+Valve+立钻哥哥+==)
  14. thinkadmin关联查询
  15. 微信小程序:王者战力查询改名工具箱小程序源码
  16. 解决微信访问 80 端口的限制问题
  17. 创基MIFI扩展坞自带4G上网功能扩展坞
  18. MySQL批量修改表的编码和字符集
  19. 轮廓图编程-自定义QChartView
  20. 乘势5G 车联网规模商用已见曙光。

热门文章

  1. onvif device manager 找不到ipc_Qt音视频开发32-Onvif网络设置
  2. 品质和创新成为 GDC 2017 “State of Unreal” 的焦点
  3. Unity Optimizing Shader Load Time
  4. 《深入探索C++对象模型》笔记之第一章关于对象
  5. Java程序员学习笔记——Mybatis日常记录
  6. 关于CSS与HTML知识点总结(二)
  7. Java应用程序的基本框架
  8. js new Date()
  9. 操作符union/union all、intersect、minus、(not)exist
  10. VMware虚拟机关闭后托盘运行设置