如何在C语言中输出一个字符串?

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

 scanf("%s", str); /*输入参数是已经定义好的“字符数组名”, 不用加&, 因为在C语言中数组名就代表该数组的起始地址*/
 
输出结果是:
请输入字符串:爱你一生一世
输出结果:爱你一生一世
用 scanf 给字符数组赋值不同于对数值型数组赋值。前面讲过,给数值型数组赋值时只能用 for 循环一个一个地赋值,不能整体赋值。而给字符数组赋值时可以直接赋值,不需要使用循环。此外从键盘输入后,系统会自动在最后添加结束标志符 '\0'。但是用 scanf 输入字符串时有一个地方需要注意:如果输入的字符串中带空格,比如“i love you”,那么就会有一个问题。我们将上面程序运行时输入的字符串改一下:
 
输出结果是:
请输入字符串:i love you
输出结果:i
我们看到,输入的是“i love you”,而输出的只有“i”。原因是系统将空格作为输入字符串之间的分隔符。也就是说,只要一“敲”空格,系统就认为当前的字符串已经结束,接下来输入的是下一个字符串,所以只会将空格之前的字符串存储到定义好的字符数组中。
那么这种情况该怎么办?那么就以空格为分隔符,数数有多少个字符串,有多少个字符串就定义多少个字符数组。比如“i love you”有两个空格,表示有三个字符串,那么就定义三个字符数组:
 

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

随着工作的深入,你会发现光学会一门两门语言是完全没法适应越来越繁重的工作的,总会有或多或少的需求是需要用到其他语言来解决的,最近开始接触了C的代码,所以来记录下学习过程,以防忘记(网上有太多安装教程了,大家搜索下就可以找到)


 
 
 
 
 
 
 
 

4.从键盘输入,并计算输出

从这可以看出getch是没有缓存的,输入以后立马输出,并不需要用回车来结束当前输出

而当我们在第一个输出之后添加一个等待,那么会出现第一个字符并不会立马输出,而是在回车或者任意字符之后同暂停一起输出


同样的,使用scanf以及gets接收也出现缓存数据


可以看到,当我们在输入单独的字符时,按下回车,gets会认为你的回车是一个字符串从而输出,这个又涉及到了缓存,在中我会说明(现在还没研究,只是单纯的写上了一个假链接)

注:在下一次读取之前清空缓存

可以在下次输出前写上这条代码,scanf是可以写正则的

前面我无法使用conio.h库的原因找到了,因为这个库不是标准库,只是在window下才会有,所以我们在选择的时候需要注意,如下图,MinGW是有该库的,而Cygwin是没有该库的,所以大家要注意一下

}

我要回帖

更多关于 C语言中字符串用什么表示 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信