C语⾔scanf与getchar,gets的区别
C语⾔scanf与get char,gets的区别
1.scanf()
(A)格式化说明符
格式字符说明
%a                读⼊⼀个浮点值(仅C99有效)
%A                同上
%c                读⼊⼀个字符
%d                读⼊⼗进制整数
%i                读⼊⼗进制,⼋进制,⼗六进制整数
%o                读⼊⼋进制整数
%x                读⼊⼗六进制整数
%X                同上
%c                读⼊⼀个字符
%s                读⼊⼀个字符串
%f                读⼊⼀个浮点数
%F                同上
%e                同上
%E                同上
%g                同上
%G                同上
%p                读⼊⼀个指针
%u                读⼊⼀个⽆符号⼗进制整数
%n                ⾄此已读⼊值的等价字符数
%[]                扫描字符集合
%%                读%符号
但是由于我初学C语⾔所以很多格式字符并没有见过,这算是课外学习度娘上的知识啦,上⾯那个链接详细讲述了scanf的⼀些问题,可以去看⼀下哦。
我要讲⼀个关于scanf从键盘输⼊数据时,给多个变量赋的值之间⼀定要⽤空格、回车或者 Tab 键隔开,⽤以区分是给不同变量赋的值。⽽且空格、回车或 Tab 键的数量不限,只要有就⾏。⼀般都使⽤⼀个空格。(需要注意的是当你要给多个变量赋值的时候不要加上“逗号”,不然你在编译的时候就需要把你输进去的逗号再输⼀遍了)
scanf()以Space(空格),Enter(回车),tab结束⼀次输⼊,最后输⼊的回车符不会被舍弃(留在缓冲区中)。
#include <stdio.h>
int main()
{
char op1, op2;
scanf("%c", &op1);
scanf("%c", &op2);
printf("%d %d\n", op1, op2);
return 0;
}
运⾏结果
q
113 10
Process exited after 5.982 seconds with return value 0
请按任意键继续. . .
看吧,此时你会发现输出的第⼆个数是10,因为scanf会将缓冲区中的回车符读取,当输⼊缓冲区已经没有东西的时候就会输出结果。
< char()
getchar()是在输⼊缓冲区【顺序】读⼊【⼀个】字符(包括Space、Enter和Tab还有字母,数字别忘了也算符号)依旧以Enter键结束,只不过Enter键也会被放⼊缓冲区。
这⾥需要说⼀下如果你⼀次输⼊了多个字符的话,那接下来它所取得字符会直接从缓冲区中取出。
#include <stdio.h>
int main()
{
char op1,op2,op3;
op1=getchar();
op2=getchar();
op3=getchar();
printf("%d %d %d\n",op1,op2,op3);
return 0;
}
以下是多种编译运⾏结果
abc
97 98 99
Process exited after 6.842 seconds with return value 0
请按任意键继续. . .
a b//注意中间有个空格
97 32 98
Process exited after 8.391 seconds with return value 0
请按任意键继续. . .
a
b
97 10 98//这⾥是输⼊了字母a然后⼀个回车然后字母b(最后会输⼊⼀个回车被留在了缓冲区中,只读取了前三个字符)
Process exited after 13.01 seconds with return value 0
请按任意键继续. . .
gets是从标准输⼊设备(键盘)读‘字符串’函数,它可以⽆限读取,不会判断上限,以回车结束读取。可以说gets() 函数不仅⽐ scanf 简洁,⽽且,就算输⼊的字符串中有空格也可以直接输⼊,不⽤像 scanf 那样要定义多个字符数组。
此外,关于使⽤ gets() 函数需要注意:使⽤ gets() 时,系统会将最后“敲”的换⾏符从缓冲区中取出来,然后丢弃,所以缓冲区中不会遗留换⾏符。这就意味着,如果前⾯使⽤过 gets(),⽽后⾯⼜要从键盘给字符变量赋值的话就不需要吸收回车清空缓冲区了,因为缓冲区的回车已经被 gets() 取出来扔掉了。
# include <stdio.h>
int main(void)
{
char wei[10];
char op;
printf("请输⼊字符串:");
gets(wei);
printf("%s\n", wei);
op = getchar();
printf("op = %c\n", op);
return 0;
}
请输⼊字符串:I love you
I love you
wc语言和c++区别
op = w (上⼀个输完I love you之后会输⼊⼀个回车键,并没有留在缓冲区,因此最后运⾏结果会正常输出字母w)
Process exited after 24.39 seconds with return value 0
请按任意键继续. . .
在这⾥可以讲述⼀下scanf与gets的⼀点区别
1.scanf :当遇到回车,空格和tab键会⾃动在字符串后⾯添加’\0’,但是回车,空格和tab键仍会留在输⼊的缓冲区中。
gets:可接受回车键之前输⼊的所有字符,并⽤’\n’替代 ‘\0’.回车键不会留在输⼊缓冲区中。
2.scanf不能接受空格、制表符Tab、回车等;
gets能够接受空格、制表符Tab和回车等;
它们字符串接受结束后⾃动加\0;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。