C语言中字符串的输入输出
C语言中字符类型:char a='a';
字符串类型:
1 | char a[100]; |
字符串末尾会自动补’\0’(串尾符)
输入&输出
gets() puts()
该函数原型:
1 |
|
gets() 函数的功能是从输入缓冲区中读取一个字符串存储到字符指针变量 str 所指向的内存空间
1 |
|
读空格/换行情况
gets/puts可以一直读/输出空格,不能读/输出换行
fgets() & fputs()
fgets()函数定义:char *fgets(char *str, int n, FILE *stream)
从指定的流 stream 读取一行,并把它存储在 str 所指向的字符串内。当读取 (n-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。
fputs()函数定义:
C 库函数 int fputs(const char *str, FILE *stream)
把字符串写入到指定的流 stream 中,但不包括空字符(“\0”)。
空格字符不是空字符
1 |
|
读空格/换行情况
fgets()读取字符数受变量int n
控制,其余与gets/puts相同
getchar()
用法:char a=getchar();
1 |
|
scanf() fscanf() fscanf_s()
此类函数读到空格就停
1 |
|
printf()类会输出空格
sscanf() sscanf_s()
sscanf是一个很好用的函数,利用它可以从字符串中取出整数、浮点数和字符串等等。它的使用方法简单,特别对于整数和浮点数来说。
- 常见用法。
1 | charstr[512]={0}; |
取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。
1
2
3
sscanf("123456","%4s",str);//多余的字符串不会留在缓存区
printf("str=%s",str);取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。
1 | sscanf("123456abcdedf","%[^]",str); |
- 取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串。
1 | sscanf("123456abcdedfBCDEF","%[1-9a-z]",str); |
- 取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串。例:
1
2
3
4
sscanf("123456abcdedfBCDEF","%[^A-Z]",str);
printf("str=%s",str);
可以用如下代码将字符串形式的ip地址转换为四个整数:
1 | char * inputIp |
注意
scanf这种格式串不能接收带空格的字符串,比如输入”abc 123 678”的话,字符串只会接收到abc,遇空格就结束
使用 gets() 时,系统会将最后“敲”(Enter)的换行符从缓冲区中取出来,然后丢弃,所以缓冲区中不会遗留换行符;
而使用scanf时,最后的“敲”会遗留在缓冲区中,如果使用scanf,则需要使用gerchar()将缓冲区的Enter吃掉
实例(https://blog.csdn.net/Qxiaofei_/article/details/122142431):
- 使用gets()后再输入一个字符,可知缓冲区无残留Enter
- 换成scanf后,只敲了一次回车就结束程序,可知scanf情况下缓冲区有残留Enter
加入getchar()即可解决残留Enter问题