C语⾔scanf输⼊字符串,举例详解
除了在定义字符数组时初始化外,还可以通过scanf从键盘输⼊字符串。下⾯写⼀个程序:
#include <stdio.h>
int main(void)
{
char str[10];  //str是string的缩写, 即字符串
printf("请输⼊字符串:");
scanf("%s", str);  /*输⼊参数是已经定义好的“字符数组名”, 不⽤加&, 因为在C语⾔中数组名就代表该数组的起始地址*/
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’ 赋给该字符变量了,所以此时对字符变量赋值前要⾸先清空缓冲区。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。