C语⾔中%c与%s的区别与划分详解%c格式对应的是单个字符,%s格式对应的是字符串。
例:
char a;
char b[20];
scanf("%c",&a); //只能输⼊⼀个字符。
scanf("%s",b); //可以输⼊⼀串不超过20字符的字符串。
%c对应类型为char, %s对应类型为char * , 即字符串.
⽤作输⼊时, ⼆者参数都要传char * 型.
%c输⼊函数只会对⼀个字节空间赋值. ⽽%s会⼀直赋值,直到输⼊中遇到空⽩字符为⽌.
⽤作输出时, %c传char类型,输出⼀个字符. %s传char*类型参数, 输出到\0为⽌.
%c只能输出或输⼊⼀个字符,%s输出的是⼀串字符还有就是char a; string s;
输⼊的时候scanf("%c", &a);这⾥的&不能少
⽽scanf("%s",s);这⾥不能有&符号
转换说明符
%a(%A) 浮点数、⼗六进制数字和p-(P-)记数法(C99)
%c 字符
%d 有符号⼗进制整数
%f 浮点数(包括float和doulbe)
%e(%E) 浮点数指数输出[e-(E-)记数法]
%g(%G) 浮点数不显⽆意义的零"0"
%i 有符号⼗进制整数(与%d相同)
%u ⽆符号⼗进制整数
%o ⼋进制整数 e.g. 0123
%x(%X) ⼗六进制整数0f(0F) e.g. 0x1234
%p 指针
%s 字符串
%% "%"
补充知识:c语⾔中scanf("%c",&c)吃掉回车或者空格字符的问题
2`标志
左对齐:"-" e.g. "%-20s"
右对齐:"+" e.g. "%+20s"
3.格式字符串(格式)
〔标志〕〔输出最少宽度〕〔.精度〕〔长度〕类型
"%-md" :左对齐,若m⽐实际少时,按实际输出。
"%m.ns" :输出m位,取字符串(左起)n位,左补空格,当n>m or m省略时m=n
"%m.nf" :输出浮点数,m为宽度,n为⼩数点右边数位
"%3.1f" : 输⼊3852.99 输出3853.0
补充知识:c语⾔中scanf("%c",&c)吃掉回车或者空格字符的问题
我就废话不多说了,⼤家还是直接看代码吧~
#include<stdio.h>
void main(){
int a;
char b;
printf("input a integer\n");
scanf("%d",&a);
//这⾥需要吸收回车符下⾯有种⽅法,第⼆种我没看懂谁能改下代码告诉我第⼆种怎么⽤
printf("input a char\n");
scanf("%c",&b);
printf("%d,%c\n",a,b);
}
/*
(1)⽤getchar()清除
(2)⽤"%1s"来限制
(3)⽤格式串中空格或"%*c"来"吃掉"
(4)⽤函数fflush(stdin)清除全部剩余内容
*/
下⾯使⽤第⼆种⽅法
#include<stdio.h>
int main(){
int a;
char b;
printf("input a integer\n");
scanf("%d",&a);
//这⾥需要吸收回车符下⾯有种⽅法,第⼆种我没看懂谁能改下代码告诉我第⼆种怎么⽤
printf("input a char\n");
scanf("%1s",&b);
printf("%d %c\n",a,b);
system("pause");
return 0;
}
环境(dev c++)
c语言和c++区别测试结果
可以看出a的值异常了,为什么呢?
这应该和编译器有关系,因为%1s的输⼊⽅式的问题。
解决⽅法有两种:
第⼀:
char b;
int a;
将这两个变量的声明换⼀下,哈哈,以前⽼师说过。但我感觉着不是解决⽅法,如果还有其他的变量,这种⽅式是不是还会危害其他呢。
第⼆:
#include<stdio.h>
int main(){
int a;
char b[2];
printf("input a integer\n");
scanf("%d",&a);
//这⾥需要吸收回车符下⾯有种⽅法,第⼆种我没看懂谁能改下代码告诉我第⼆种怎么⽤
printf("input a char\n");
scanf("%1s",&b);
printf("%d %c\n",a,b[0]);
system("pause");
return 0;
}
b声明成字符创的形式,哈哈,这个好。。。。
结果为:
以上这篇C语⾔中%c与%s的区别与划分详解就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论