目录
scanf
1.读取一行带有空格和其它特殊符号的字符串
比如要读取一行123 456中间带有空格的字符串这个时候就需要特定的格式
如下:
#include<stdlib.h>
#include<stdio.h>
int main(int argc, char const *argv[])
{
char a[100];
int i = 1,m=0;
while (i--)
{
printf("请输入字符串");
scanf("%[^\n]s", a); //以字符串的形式读取
m++;
}
printf("%s", a);
return 0;
}
这种读取的好处是,不会因为空格、换行等导致读取中断,输入是多少是什么形式,最终显示的就是什么形式;会将空格和换行符也按照Ascall存储进字符数组;如下图:
上述说明这种形式将空格和换行都存储进去了;
**
下面这种形式也是经常需要使用的读取输入的形式:
**
在windows下是按Ctrl+z键输入EOF,在Linux中是按下Ctrl+d键输入EOF。
while(scanf("%c",&power[i][j])==EOF)
2.以字符串的形式读取
如下:
#include<stdlib.h>
#include<stdio.h>
int main(int argc, char const *argv[])
{
char a[100];
int i = 2,m=0;
while (i--)
{
printf("请输入字符串");
scanf("%s", a); //以字符串的形式读取
m++;
}
printf("%s", a);
return 0;
}
输出结果如下:
这种形式scanf并不会读取空格和换行等转义字符,它会在空格和换行这些转义字符这里停止读取,相等于它的读取截止;
参考文章:
scanf("%[^\n]", str)正则用法,strchr()用法
fgets()函数
# include <stdio.h>
#include<string.h>
int main(void)
{
char str[7]; /*定义一个最大长度为7, 末尾是'\0'的字符数组来存储字符串*/
printf("请输入一个字符串:");
fgets(str, 5, stdin); /*从输入流stdin即输入缓冲区中读取5个字符到字符数组str中*/
printf("%ssize=%lu\nstlen=%lu\n", str,sizeof(str),strlen(str));
printf("str3=%cstr[4]=%d", str[3],str[4]);
return 0;
}
上述代码打印结果如下:
因为fgets函数会自动将字符串数组最后一位补零,所以可以在文件流或输入输出流里取到的最大字符是4个,而如果当输入的少于4个时比如上面只输入了123个字符,那么还会把换行符取走放在字符串数组中,当然最后一个还是’\0’.
strlen()函数将换行符也会算作一个字符,所以有4个字符
fgets函数及其用法,C语言fgets函数详解fgets与gets的区别
feof函数和eof
与其它不一样的时返回非零值才是到达了文件末尾