空白符:空格,回车,制表符等等。
1、字符型数据(单个数据的输入)。
(1)scanf输入,
遇到回车,空格,tab键会记录进去,使得一个字符的内容变为空格这类的字符,
eg:输入格式:5
M
解决方法:
(1)getchar();处理一个字符。%*c赋值抑制符,跳过一个字符,读入但不存储。
scanf("%d",&n); getchar(); scanf("%c",&M);
(2)跳过多个空白字符在格式传中的 %c之前加上空格或者在%d之后加上空格
scanf("%d",&n); scanf("%d ",&n); scanf(" %c",&M); scanf("%c",&M);
2、字符数组与字符串
通常
用一个字符数组来存储一个字符串。字符串和普通字符数组的区别在于字符串末尾有一个空字符'\0'. 空字符不计入字符串有效字符,也不计入总长度
字符串的循环遍历条件:
s【i】!=‘\0’
字符串的输入与输出
所有的字符串操作针对的其实是字符数组,因为字符串是无法直接定义的。
char name[100];
(1)用%s整体输入/输出
scanf(“%s”,name);
printf(“%s”,name);
注意:
该格式读入的数据中不能含有空白符,所有的空白符都会被当做数据结束的标志。
(2)gets()和puts()函数
gets(name);
遇到换行符或文件结束标志会结束读入。换行符不作为读取字符串的内容,换行符会被转黄伟字符串结束标志‘|0’.
puts():输出字符串并自动换行, 该函数只能输出字符串。
printf():通过格式控制符%s输出字符串,不能自动换行。除了字符串,printf() 还能输出其他类型的数据。
gets和scanf的区别
1、 gets可以接收空格;而scanf遇到空格、回车和Tab键都会认为输入结束,所有它不能接收空格。
例如:如果输入为"hello world"时,上面程序的运行结果是"hello world"。而如果用scanf则只能输出hello
2、scanf对末尾回车符的处理:把回车符保留在缓存中。gets对末尾回车符的处理:接收回车,但把回车替换为\0.
3、gets的返回值为char*型,当读入成功时会返回输入的字符串指针地址,出错时返回NULL;scanf返回值为int型,返回实际成功赋值的变量个数,当遇到文件结尾标识时返回EOF。
4、gets函数仅用于读入字符串;scanf为格式化输出函数,可以读入任意C语言基础类型的变量值,而不是仅限于字符串(char*)类型。
3、常用字符串函数
(1)string.h头文件中:
strlen(),计算长度。strlen(s)返回的就是
结束标记之前的字符个数。而s[strlen(s)]是结束标记“\0”。
字符串复制:
strcpy(字符数组1,字符串2)复制第二个参数中的内容到第一个参数,
strcpy(字符数组1,字符串2,n)复制第二个参数中的最多n个字符到第一个参数中。
字符串比较:
strcmp(字符串1,字符串2)比较大小,前者大返货一个正整数,后者大返回一个负整数,相等放回0.
strncmp(s1,s2,n)将字符串1中最多n个字符与字符串2进行比较
字符串连接:
strcat(s1,s2)第二个参数的内容添加到第一个参数的有效字符后面。
strcat(s1,s2,n)第二个参数的最多n个字符添加到第一个参数的有效字符后面。
字符串 逆置:
strrev(str) /* * 函数名:reverseStr * 函数功能:把字符串中的字符逆置 * 参数:需要逆置的字符串地址 */ void reverseStr(char *str) { int len; int i; char temp; len = strlen(str); // 获取字符串长度 /* 中间对折,两边调换 */ for (i = 0; i < len/2; i++) { temp = str[i]; str[i] = str[len-1-i]; str[len-1-i] = temp; } }
(2)stdio.h中的用于字符串输入输出的函数(
ip判断中用得非常巧,字符串类型的数据可以以其他格式存储,且可以改变成整型存储。整型数据也可以再存储到字符串中)
sprintf(str,"zhang san is %d",d);
将输出结果保存在str中而不是输出到屏幕了。
sscanf(str,"%*6d%4d%2d%2d",&year,&month,&day);
从str字符串中读入数据并存储到变量中。str中存储了某人的身份证号“410621111109092108”。
二维字符数组的输入和输出:
在输入之前如果有整型数据的话,记住输入过整型数据后加一个getchar(),将你下一个输入的转行符记录走
eg:
while(scanf("%d%d",&n,&m),n!=0&&m!=0){ getchar();
char str[n][LEN];//注意列长度与结果的正确性有很大关系,最好不要直接用你定义的输入数据,可以用#define一个 for(i=0;i<n;i++){ gets(str[i]); } for(i=0;i<n;i++){ puts(str[i]); }