如果想把一个字符串读入程序,首先必须预留储存该字符串的空间,然后用输入函数获取该字符串。
gets()函数和puts()函数
gets()函数读取整行输入,直至遇到换行符,然后丢弃换行符,存储其余字符,并在这些字符末尾添加一个空字符,使其成为一个C字符串。
1 |
|
puts()函数显示字符串,并在末尾添加换行符,成功返回非负值,失败返回EOF。puts(words)相当于printf(“%s\n”,words)
1 |
|
fgets()函数和fputs()函数
该函数专门用于处理文件输入。
fgets()函数的第2个参数指明了读入字符的最大数量。如果该参数是n,那么fgets()读入n-1个字符,或者遇到第一个换行符为止。如果fgets()函数读到一个换行符,会把换行符存储在字符串中(和gets()区别)。
fgets()函数的第3个参数指明要读入的文件。如果是从键盘输入,将stdin(标准输入)作为参数。
fgets()函数返回指向char的指针。如果正常读入,返回的地址和传入的第1个参数相同。如果读入异常,返回空指针(C语言中用宏NULL来表示)
1 |
|
fputs()函数,它不会在末尾添加换行符。如果是从屏幕输入,将stdout(标准输出)作为参数。
1 |
|
gets_s()函数
gets_s()只从标准输入中读取数据,所以不需要第三个参数。并且gets_s()读到换行符会丢弃它而不是存储它。
如果gets_s()读到最大字符数都没有读到换行符,会执行以下几步。首先把目标数组中的首字符设置为空字符,读取并丢弃随后的输入直至读到换行符或者文件结尾,然后返回空指针。接着,调用依赖实现的“处理函数”,可能会中止或退出程序。
以上的特性说明,只要输入行未超过最大字符数,gets_s()和gets()几乎一模一样,完全可以替换!
scanf()函数和printf()函数
scanf()有两种方法确定输入结束:%5s,读取5个字符或者读到第一个空白停止。
输入语句 | 原输入序列 | name中的内容 | 剩余输入序列 |
---|---|---|---|
scanf(“%s”,name); | Fleebert▢Hup | Fleebert | ▢Hup |
scanf(“%5s”,name); | Fleebert▢Hup | Fleeb | bert▢Hup |
scanf(“%5s”,name); | Ann▢Ular | Ann | ▢Ular |
注:▢表示空格
printf()函数主要是使用其格式化功能。
自定义输入输出函数
不一定非要使用C库中的标准函数,如果无法使用这些函数或不想使用它们,完全可以在getchar()和putchar()的基础上自定义所需的函数。