除了在定义字符数组时初始化外,还可以通过scanf从键盘输入字符串。下面写一个程序:

#include <stdio.h>
int main(void)
{
char str[10];  //str是string的缩写, 即字符串
printf("请输入字符串:");
scanf("%s", str);  /*输入参数是已经定义好的“字符数组名”, 不用加&, 因为在C语言中数组名就代表该数组的起始地址*/
printf("输出结果:%s\n", str);
return 0;
}

输出结果是:
请输入字符串:爱你一生一世
输出结果:爱你一生一世

用 scanf 给字符数组赋值不同于对数值型数组赋值。前面讲过,给数值型数组赋值时只能用 for 循环一个一个地赋值,不能整体赋值。而给字符数组赋值时可以直接赋值,不需要使用循环。此外从键盘输入后,系统会自动在最后添加结束标志符 ‘\0’。但是用 scanf 输入字符串时有一个地方需要注意:如果输入的字符串中带空格,比如“i love you”,那么就会有一个问题。我们将上面程序运行时输入的字符串改一下:

#include <stdio.h>
int main(void)
{
char str[10];  //str是string的缩写, 即字符串
printf("请输入字符串:");
scanf("%s", str);  //输入参数是已经定义好的字符数组名
printf("输出结果:%s\n", str);
return 0;
}

输出结果是:
请输入字符串:i love you
输出结果:i

我们看到,输入的是“i love you”,而输出的只有“i”。原因是系统将空格作为输入字符串之间的分隔符。也就是说,只要一“敲”空格,系统就认为当前的字符串已经结束,接下来输入的是下一个字符串,所以只会将空格之前的字符串存储到定义好的字符数组中。

那么这种情况该怎么办?那么就以空格为分隔符,数数有多少个字符串,有多少个字符串就定义多少个字符数组。比如“i love you”有两个空格,表示有三个字符串,那么就定义三个字符数组:

#include <stdio.h>
int main(void)
{
char str1[10], str2[10], str3[10];
printf("请输入字符串:");
scanf("%s%s%s", str1, str2, str3);
printf("输出结果:%s %s %s\n", str1, str2, str3);  //%s间要加空格
return 0;
}

输出结果是:
请输入字符串:i love you
输出结果:i love you

需要注意的是,前面讲“清空缓冲区”的时候讲过,用 scanf 输入时,不管输入什么,最后“敲”的回车都会被留在缓冲区,这里也不例外。输入字符串时最后“敲”的回车也会被留在缓冲区,如果紧接着要给一个字符变量赋值的话,那么还没等你输入系统就自动退出来了。因为系统自动将回车产生的字符 ‘\n’ 赋给该字符变量了,所以此时对字符变量赋值前要首先清空缓冲区。

转载:
http://c.biancheng.net/view/232.html

C语言scanf输入字符串,举例详解相关推荐

  1. c语言中截取字符串 sub,详解C++ string常用截取字符串方法

    string常用截取字符串方法有很多,但是配合使用以下两种,基本都能满足要求: find(string strSub, npos); find_last_of(string strSub, npos) ...

  2. c语言中的字符串数组,详解C语言中的字符串数组

    在C语言当中,字符串数组可以使用: char a[] [10]; 或者 char *a[]; 表示 第一种表示方式固定了每个字符串的最大大小.第二种没有字符串的大小限制. #include #incl ...

  3. python3多行输入字符串_详解Python3 定义一个跨越多行的字符串的多种方法

    方法一:使用三引号 >>> str1 = '''Le vent se lève, il faut tenter de vivre. 起风了,唯有努力生存. (纵有疾风起,人生不言弃. ...

  4. C语言中常见字符串API详解

    以下均为笔记,草率见谅,首先介绍下在字符串章节所用的函数,再介绍几个常见的api malloc 函数原型:void *malloc(size_t size) C库函数void *malloc(size ...

  5. 【C语言进阶】⑦字符串函数详解

    文章目录 一.字符串函数汇总 1. 求字符串长度 - strlen(): 1.2 函数介绍: 1.3 自己模拟实现strlen()函数的功能 1.3.1 计数器版本 2. 字符串拷贝函数 - strc ...

  6. c语言遍历 json字符串,全面详解c语言使用cJSON解析JSON字符

    为什么选择cJSON来解析JSON字符串?因为简洁又简单,而且效率又快,cJSON工程文件也非常简单,仅一个.c文件和一个.h文件! 如果要自己写的话就是重造轮子了,况且效率上也不一定会比cJSON更 ...

  7. C语言递归实现字符串反转(详解)

    我看到这个题目后,甚至我看完答案以及解析后,我还是不能理解,怎么就搞完了,怎么转的? 这个递归搞得我云里雾里的,以至于我花了点时间在笔记和代码调试上面一步一步的运行,终于搞懂了,首先代码具体是这样: ...

  8. C语言字符串库函数详解模拟实现(strlen、strcpy、strcat、strcmp)+字符操作函数+字符转换函数

    字符串库函数详解 一.无字符串长度限制的字符串函数 1. strlen 计算字符串长度函数 2. strcpy 字符串拷贝函数 3. strcat 字符串追加函数 4. strcmp 字符串比较函数 ...

  9. scanf函数使用方法详解

    scanf函数使用方法详解 一.scanf函数是什么? 二.scanf函数的作用 三.注意事项 1.输入数据 2.%c 四.字段宽度 五.scanf函数的返回值 一.scanf函数是什么? 1.首先我 ...

最新文章

  1. 将磁盘上的一个文本文件的内容复制到另一个文件中
  2. 听说你用JavaScript写代码?本文是你的机器学习指南
  3. 【面试必会】editplus使用教程java
  4. angular 控件css_Angular 4 设置组件样式的几种方式
  5. 《程序员的思维修炼》思维导图
  6. SQLserver2008高级查询语句应用实例
  7. Java集合框架:WeakHashMap
  8. 第一章 Spring基础
  9. P4451-[国家集训队]整数的lqp拆分【生成函数,特征方程】
  10. 剑指offer:26-30记录
  11. MySQL存储引擎及InnoDB并发控制介绍
  12. 游戏界的扛把子、3D 游戏之父约翰•卡马克的传奇人生
  13. 螺杆泵matlab,基于Matlab与VC++混合编程的螺杆泵转子型线设计
  14. 常见的云计算安全问题
  15. TFS dataserver故障测试
  16. fiddler的安装与配置
  17. 元气骑士机器人的成就皮肤_元气骑士:5把特殊“红武”,想要机器人的皮肤,用它就对了!...
  18. matlab文件编辑器,matlab写出两种打开M文件编辑器的方法
  19. linux 共享文件夹 权限
  20. Swing Copters摇摇欲坠游戏再次风靡全球,再次虐心,摔手机

热门文章

  1. 【Spring Boot】条件化自动装配
  2. python 显示字典内容_python字典基本操作
  3. numpy.random.randint用法
  4. WIFI营销读书笔记之一:Wifi营销基础知识
  5. MFC绘制Bezier曲线
  6. 做营销,运营网站,讲的是啥“说服力”?
  7. xxd,od,hexdump
  8. 借佛祖之口说出的爱情箴言(转)
  9. Python案例分析:中美汇率转换(2)
  10. 网易云和腾讯互掐起来了?鸿蒙“后院”起火了