1,Scanfil code是什么意思
2,C语言里面的lf是什么意思
3,手机版C语言编辑器
我用的notepad++
一个开源的编辑器
4,C语言scanf怎么用
应该是遇到非法数据的时候,scanf自动结束。
输入4个数时,前3个数正常获取并存储到变量中,其余数据暂存在缓存区中备用。第二次执行scanf函数的时候,从缓存区继续读取上次输入的数据。
如:输入1,2,3,4 这时第二次scanf执行时,缓冲区数据为,4 这时非法数值数据,scanf结束,然后执行printf语句,输出原来的a、b、c的值,以后每次循环时scanf都自动结束,所以会连续9次输出。
你可以试着输入1,2,3 4 看一下运行结果,就明白了(这一次运行正常)。
5,c语言中scanf的用法
6,在C语言里什么时候用scanf函数
7,c程序中scanf是什么意思
另外.cn/bbs。我个人认为是不是为了符合人的思考习惯://www,那咱们用的时候就得加.21ki,当初人家发明c语言时说scanf不需要加地址符.21ki,当然要它的地址了,放到某个变量里.即在编程后面输出结果中使用的命令,那咱们用的时候自然就不用加了,从键盘得到字符.cn/bbs,只要知道变量名就行了.php 里有很多教程 scanf意思是从键盘输入数据scanf是c语言等二级语言的输出符号.php" target="_blank">www. 到%0a评论 |文章TAG:scanfilScanfilcode是什么意思code是什么什么scanf是C语言中的一个输入函数,与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include 。(在有一些实现中,printf函数与scanf函数在使用时可以不使用预编译命令#include 。)它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。scanf函数返回成功读入的数据项数,读入数据时遇到了“文件结束”则返回EOF。 scanf是一个输入函数。例如 int a; scanf("%d",&a); 你在console输入:5 那么a=5了 8,scanf函数的用法
scanf()是C语言中的一个输入函数。 scanf函数的用法与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include <stdio.h>。(在有一些实现中,printf函数与scanf函数在使用时可以不使用预编译命令#include <stdio.h>。)它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。 扩展资料: 使用scanf函数的注意问题: 1、在高版本的 Visual Studio 编译器中,scanf 被认为是不安全的,被弃用,应当使用scanf_s代替 scanf。 2、对于字符串数组或字符串指针变量,由于数组名可以转换为数组和指针变量名本身就是地址,因此使用scanf()函数时,不需要在它们前面加上"&"操作符。 3、 可以在格式化字符串中的"%"各格式化规定符之间加入一个整数,表示任何读操作中的最大位数。 4、scanf函数中没有类似printf的精度控制。 如: scanf("%5.2f",&a); 是非法的。不能企图用此语句输入小数为2位的实数。 5、scanf中要求给出变量地址,如给出变量名则会出错 如 scanf("%d",a);是非法的,应改为scanf("%d",&a);才是合法的。 6、 在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔,则可用空格,TAB或回车作间隔。 C编译在碰到空格,TAB,回车或非法数据(如对“%d”输入“12A”时,A即为非法数据)时即认为该数据结束。 7、在输入字符数据(%c)时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。 参考资料来源:搜狗百科-scanf (计算机语言函数) #include <stdio.h> void main() { char c1,c2,c3,c4,c5,c6; scanf("%c%c%c%c",&c1,&c2,&c3,&c4); c5=getchar(); c6=getchar(); putchar(c1); putchar(c2); printf("%c%c\n",c5,c6); } /* 作为一位编程人员,指出你所写的程序中的一个问题。在书写代码时,要在半角字符下书写。不要在全角字符下写,虽然调试时可以改正,但显得自己资历浅。 首先,了解下putchar,getchar表示的意思和作用。 putchar函数(字符输出函数)的作用是向终端输出一个字符。 一般格式为: putchar(c) getchar函数(字符输入函数)的作用是从终端(或系统隐含指定的输入设备)输入一个字符。 ****getchar函数没有参数**** 一般格式为: getchar() 当你从键盘输入123回车时,回车符也算入了字符的范围,就是c4为回车符,由于c5和c6还各自等待接受 从键盘输入的一个字符。所以在输入123回车时不会直接输出12,一直等到接受了c5和c6就依次打印出1245 注意putchar只能向终端输出一个字符,getchar只能接受一个字符, 虽然第一次输入了123和回车符,但是: putchar(c1); putchar(c2); 只能输出12两个字符。 虽然第二次输出了45678和回车符, 但是: c5=getchar(); c6=getchar(); 只能接受45. 所以输出1245了。 */ 1.scanf函数的一般形式 scanf(格式控制,地址表列) int scanf(char *format[,argument,...]); “格式控制”的含义同printf函数;“地址表列”是由若干个地址组成的表列,可以是变量的地址,或字符串首地址。 scanf()函数返回成功赋值的数据项数,出错时则返回eof。 例题 scanf函数输入数据。 #include<stdio.h> void main(){ int a,b,c; printf("input a,b,c\n"); scanf("%d%d%d",&a,&b,&c); printf("a=%d,b=%d,c=%d",a,b,c); } 格式字符 说明 %a 读入一个浮点值(仅c99有效) %a 同上 %c 读入一个字符 %d 读入十进制整数 %i 读入十进制,八进制,十六进制整数 %o 读入八进制整数 %x 读入十六进制整数 %x 同上 %c 读入一个字符 %s 读入一个字符串 %f 读入一个浮点数 %f 同上 %e 同上 %e 同上 %g 同上 %g 同上 %p 读入一个指针 %u 读入一个无符号十进制整数 %n 至此已读入值的等价字符数 %[] 扫描字符集合 %% 读%符号 附加格式说明字符表修饰符 说明l/l 长度修饰符 输入"长"数据 h 长度修饰符 输入"短"数据 w 整型常数 指定输入数据所占宽度 * 星号 空读一个数据 hh,ll同上h,l但仅对c99有效。 (b) 空白字符空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符,空白符可以是space,tab,newline等等,直到第一个非空白符出现为止。(c) 非空白字符一个非空白字符会使scanf()函数在读入时剔除掉与这个非空白字符相同的字符。 其他关于scanf的应用可以到下地址看, <a href="http://wenwen.soso.com/z/urlalertpage.e?sp=shttp%3a%2f%2fbaike.baidu.com%2fview%2f1390039.htm" target="_blank">http://baike.baidu.com/view/1390039.htm</a> 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]); scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。可以读入任何固有类型的数据并自动把数值变换成适当的机内格式。 其调用格式为: scanf("<格式化字符串>",<地址表>); scanf()函数返回成功赋值的数据项数,出错时则返回EOF。 其控制串由三类字符构成: 1。格式化说明符; 2。空白符; 3。非空白符; (A) 格式化说明符 格式字符 说明 %a 读入一个浮点值(仅C99有效) %A 同上 %c 读入一个字符 %d 读入十进制整数 %i 读入十进制,八进制,十六进制整数 %o 读入八进制整数 %x 读入十六进制整数 %X 同上 %c 读入一个字符 %s 读入一个字符串 %f 读入一个浮点数 %F 同上 %e 同上 %E 同上 %g 同上 %G 同上 %p 读入一个指针 %u 读入一个无符号十进制整数 %n 至此已读入值的等价字符数 %[] 扫描字符集合 %% 读%符号 D 123<回车> 后 c1==1,c2==2,c3==3,c4==10(回车) 之后c5=getchar();会把输入缓冲区的一个字符赋值给C5,所以c5=4 c6=getchar();由于输入缓冲区不为空,所以会自动取一个字符赋值给C6,所以c6=5 D putchar(c1);输出1 putchar(c2);输出2 c5=getchar();输入4 c6=getchar();输入5 printf("%c%c\n",c5,c6);输出4 5 9,scanf中的格式字符i的用法
)的数据都是以ASCII码存储的(包括回车)。 程序1 #include "stdio.h" void main() { char a; char b; scanf("%d",&a); scanf("%d",&b); printf("%d %d",a,b); } 键盘输入 97<回车> 第一次回车后,buffer中的ASCII:39h,37h,0AH(0A是换行的ASCII), scanf会根据格式字符串中的第一个%d对buffer按字节顺序读取,当读取到0A时,认为%d型的数据结束,此时把已经读取到的39h,37h依据%d转为整型数据97存储在字符型变量a中。(这里是除去了扫描截止点0AH) 此时buffer中已经无任何数据了。 96<回车> 第二次回车后,按同样的流程,scanf会根据格式字符串中的第二个%d对buffer按字节顺序读取。最终b得到96. 此时buffer中已经无任何数据了。 输出 97 96 程序2 #include "stdio.h" void main() { char a; char b; scanf("%c",&a); scanf("%c",&b); printf("%d %d",a,b); } 键盘输入 9<回车>buffer:39H,0AH 因为scanf会按照第一个%c格式扫描buffer(只扫描一个字节就结束),然后把扫描到的39H直接送到变量a(当以%d格式读出来时,39H就是57) 此时,buffer中只有:0AH。 然后,scanft又遇到第二个%c,继续扫描buffer,得到0aH并送入变量b. 此时buffer中已经无任何数据了 输出 57 10 程序3 #include "stdio.h" void main() { char a[100]; char b[100]; scanf("%s",a); scanf("%s",b); printf("%s %s",a,b); } 键盘输入 abc<回车> 第一次回车后,buffer:61H,62H,63H,0AH。 scanf会按照%s的格式对buffer按字节顺序扫描,当扫描到0AH时,结束扫描(按照%s的要求,空格20H也是扫描结束点)。 然后把扫描到的(除去最后一个判断扫描截至的字节0AH)数据直接送入以a为起始地址的字符串。 此时,buffer无任何数据了。 def<回车> 第二次回车后,buffer:65H,66H,67H,0AH.扫描的流程与上面的完全一致。 输出 abc def 程序4 #include <stdio.h> void main() { int i; char j; for(i=0;i<2;i++) scanf("%c",&j);/*注意这里%前没有空格*/ printf("%d",j); } 键盘输入 1<回车>, 这里scanf执行了两次(i==0时,与i==1时),而且每次都是想对j赋值。 第一次scanf,按%c的要求,只扫描buffer中的一个字节,但是buffer中并不数据,于是要求键盘输入数据到buffer,此时的1<回车>代表向buffer中输入了:31H,0AH。 然后按%c的要求,只扫描buffer中的一个字节:31h,并将它直接送入变量j. 此时,buffer中还留下:0AH。 第二次scanf要求键盘输入数据,按%c的要求,只扫描buffer中的一个字节:0Ah,并将它直接送入变量j. 此时,buffer无数据了。 最后,你用%d格式输出j的值(0AH换成整型就是10) 输出 10 程序5 #include <stdio.h> void main() { int i; char j; for(i=0;i<2;i++) scanf(" %c",&j);/*注意这里%前有一个空格*/ printf("%d",j); } 1<回车>2<enter>的情况: scanf会按照格式控制字符串的要求,顺序扫描buffer. 但是你其中有一个空格,这个很特殊,我也是第一次发现这个问题(一般我都不会在scanf中加入任何常量字符) 我测试了一下:我发现这个空格有吸收回车(0AH)和空格(20H)的“神奇功效”,吸收之后再要求buffer给一个字节,直到这个字节不是0AH或者 20H,此时把这个字节交给下一个格式字串。 第一次循环时遇到格式字串空格,就扫描buffer中的一个字节,但是buffer中无数据,要求从键盘输入数据:1〈回车〉,buffer中有数据了——31H,0AH。再读取到字节31H,scanf发现这个并不是0AH/20H,就把这个字节31H交给格式字符%c处理。 循环结束,此时buffer里面还有:0AH. 第二次循环时遇到格式字串空格,就扫描buffer中的一个字节——0AH,发现是0AH/20H,于是就要求buffer再来一个字节。此时buffer里面已经没有数据了,要求键盘输入:2<enter>. buffer中有数据了——32H,0AH。于是再读一个字节31H,scanf发现这个并不是0AH/20H,就把这个字节32H交给格式字符%c处理(j最终得到32H)。 循环结束,此时buffer里面还有:0AH. 这里有一篇关于Printf的帖子: 程序6 #include "stdio.h" void main() { int a; int b; scanf("%c",&a); scanf("%c",&b); printf("%d %d",a,b); } 键盘输入 1<回车> 问题5: 你的编译器VC认为%d数据应该是4个字节,但是你采用的是%c读数据, scanf("%c",&a);此句读到的是1的ascii码:31h.然后把31H直接送入地址&a(而并没有改写a的三个高字节地址)。 scanf("%c",&b);同理。 你可以用printf("a=%x,b=%x\n",a,b);来验证我说的。它们的最低字节肯定是31H,0AH。 PS1: 当你把 int a;int b;放在main()外进行定义时,a,b的初值就是0。此时你会得到正确的结果。 当你把 int a;int b;放在main()内进行定义时,a,b不会被初始化(它们的三个三个高字节地址的内容是不确定的),你就会得到上面错误的结果。(定义的动态变量都不会被初始化,静态变量会被初始化为0) PS2:以下也是不正确的用法。 char c; scanf("%d",&c);/当你用%d给c赋值时,会对从&c开始的连续4个字节进行赋值。当从buffer得到的值是在一个字节范围内(-128~127),下面是可以正常输出的。但是不管怎样,这样做是很危险的——越界。 printf("%d",c); =================请你测试下这个程序======================== #include "stdio.h" void main() { char c[4],i=4; scanf("%d",c);/*请输入258<回车>*/ while(i-->0) printf("%02x ",c[i]); printf("\n"); }/*如果得到的结果是00 00 00 01 02就说明我的结论是正确的(258的转为16进制数就是00 00 01 02H,然后scanf会把这个数放入以c为起始地址的) ================以下程序也是====================== #include "stdio.h" void main() { char c,i=4; char *p=&c; scanf("%d",&c);/*请输入258<回车>*/ while(i-->0) printf("%02x ",p[i]); printf("\n"); } 输出表列) 例如:printf("i=%d,ch=%c\n",i,ch); 说明: (1)“格式控制”是用双撇号括起来的字符串,也称“转换控制字符串”,它包括两种信息: ①格式说明:由“%”和格式字符组成,它的作用是将输出的数据转换为指定的格式输出。 ②普通字符,即需要原样输出的字符。 (2)“输出表列”是需要输出的一些数据,可以是表达式 (3)printf函数的一般形式可以表示为 printf(参数1,参数2,……,参数n) 功能是将参数2~参数n按参数1给定的格式输出 2.格式字符(9种) (1)d(或i)格式符。用来输出十进制整数,有以下几种用法: ①%d,按整型数据的实际长度输出。 ②%md,m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。 ③%ld(%mld 也可),输出长整型数据。 例如:long a=123456; printf("%ld",a); (2)o格式符,以八进制数形式输出整数。格式:%o,%mo,%lo,%mlo都可。 (3)x(或X)格式符,以十六进制数形式输出整数。格式:%x,%mx,%lx,%mlx都可。 (4)u格式符,用来输出unsigned型数据,即无符号数,以十进制数形式输出。格式:%u,%mu,%lu都可。 参见:li4-3.c/*无符号数据的输出*/ (5)c格式符,用来输出一个字符。格式:%c,%mc都可。 (6)s格式符,用来输出一个字符串。格式:%s,%ms,%-ms,%m.ns,%-m.ns都可。 参见:li4-5.c /*字符串的输出*/ (7)f格式符,用来输出实数(包括单、双精度),以小数形式输出。格式:%f,%m.nf,%-m.nf都可。 注意:单精度实数的有效位数一般为7位,双精度为16位。 参见:li4-6.c/*输出单精度实数时的有效位数*/ li4-7.c/*输出双精度实数时的有效位数*/ li4-8.c/*输出实数时指定小数位数*/ (8)e(或E)格式符,以指数形式输出实数。格式:%e,%m.ne,%-m.ne都可。 (9)g(或G)格式符,用来输出实数,它根据数值的大小,自动选f格式或e格式(选择输出时占宽度较小的一种)。 3.说明 (1)除了X、E、G(用大写字母表示)外,其他格式字符必须用小写字母; (2)“格式控制”字符串内可以包含转义字符; (3)如果想输出字符“%”,则应该在“格式控制”字符串中用连续两个%表示,如: printf("%f%%",1.0/3); scanf()函数是所有C语言学习者在学习C语言过程中所遇到的第二个函数(第一个函数是printf(),Brian W.Kerninghan & Dennis M.Ritchie的“hello,world”程序基本上是所有的C语言学习者第一个范例),所以scanf()函数应当是C学习者能熟练运用的一个函数,但有很多初学者对此函数不能很好的运用,在实际编程中错误使用scanf()函数,导至程序产生某种错误不能正常运行,以至产生“scanf()函数有BUG”,“scanf()函数无用论”等等错误观点。 本文结合笔者在编程实践中及论坛上网友所遇到的问题作一释疑,但笔者水平有限(菜鸟级),难免有谬误之处,还望达人指点一二。(Email:knocker.k@126.com) 本文分上,下两篇讲述了C语言中的scanf()函数的用法,重点阐述使用scanf()函数过程中出现的常见错误及对策。当然,文中某些解决方法,均可以采用其他函数和方法来更好地解决,但本文仅限讨论scanf()函数本身。 上篇,详细介绍了scanf()函数控制串的构成。下篇,用实际例程介绍scanf()函数控制串运用出现的常见错误及对策技巧。 二、 scanf()函数的控制串 函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]); scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。可以读入任何固有类型的数据并自动把数值变换成适当的机内格式。 其调用格式为: scanf("<格式化字符串>",<地址表>); scanf()函数返回成功赋值的数据项数,出错时则返回EOF。 其控制串由三类字符构成: 1。格式化说明符; 2。空白符; 3。非空白符; (A) 格式化说明符 格式字符 说明 %a 读入一个浮点值(仅C99有效) %A 同上 %c 读入一个字符 %d 读入十进制整数 %i 读入十进制,八进制,十六进制整数 %o 读入八进制整数 %x 读入十六进制整数 %X 同上 %c 读入一个字符 %s 读入一个字符串 %f 读入一个浮点数 %F 同上 %e 同上 %E 同上 %g 同上 %G 同上 %p 读入一个指针 %u 读入一个无符号十进制整数 %n 至此已读入值的等价字符数 %[] 扫描字符集合 %% 读%符号 附加格式说明字符表 修饰符 说明 L/l 长度修饰符 输入"长"数据 h 长度修饰符 输入"短"数据 W 整型常数 指定输入数据所占宽度 * 星号 空读一个数据 hh,ll同上h,l但仅对C99有效。 (B) 空白字符 空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符,空白符可以是space,tab,newline等等,直到第一个非空白符出现为止。 (C) 非空白字符 一个非空白字符会使scanf()函数在读入时剔除掉与这个非空白字符相同的字符。 ctrl+z可以使scanf返回eof 楼上胡扯,楼上的楼上胡扯。 cout<<"输出个字符串有什么问题??"< 回车继续输入数字->按ctrl+z,回车结束输入 unix之类则是ctrl+d(应该没记错)。 至于这个程序还有几处错误, 而且看了半天不知所谓, 这坨代码究竟是干什么用的? scanf ("%d", &a); 这样就可以把 输入的整形数 传进来了。。但是你要处理八进制和16进制的话 建议你用 %s做输入条件 然后通过转换和判断来处理。。 其实i的用法和d的用法是一样的。都是以带符号的十进制形式输出整数(正数不带符号)。我举个简单的例子你就明白了。 eg: 在程序中要输出整数:a=5 格式如下: printf("%i",a)和 printf("%d",a)等效。 都是调用printf函数,其使用格式为printf(格式控制,输出列表) “格式控制”是要西文的双引号括起来的(就是在例子中的"%i"、"%d"),输出列表则是要输出的数据(即例子中的a) 最近更新
- 温州到信阳东的高铁多少钱啊,浙江温州到深圳的顺丰快递要多少钱啊
本文目录一览1,浙江温州到深圳的顺丰快递要多少钱啊2,温州到信阳有没有动车票价多少钱3,从温州回信阳要多少钱啊4,温州坐高铁到信阳得多少钱几个小时才能到5,温州到无锡火车票价1,浙 ......
【管理知识】 日期:2022-09-15
- vivox7旧手机回收价格,vivox7买了两个月那现在卖掉可以卖多少钱
本文目录一览1,vivox7买了两个月那现在卖掉可以卖多少钱2,我想二手vivox7能卖多少钱买了不到一年3,准备把我的VIVOX7Plus卖掉还能卖多少钱4,二手vivox7的回 ......
【管理知识】 日期:2022-09-15
- 为什么三亚房价上涨,房价与人口流动性过剩的关系
本文目录一览1,房价与人口流动性过剩的关系2,三亚的经济并不算发达为何房价却出奇的高3,为什么海南物价高工资低4,三亚只是一个三线城市为什么房价那么高呢5,去海南旅游都有哪几个地方 ......
【管理知识】 日期:2022-09-07
- 上海西站高铁站售票处,上海西站可以定火车票吗
本文目录一览1,上海西站可以定火车票吗2,请问上海火车站票代售点有哪些1,上海西站可以定火车票吗上海西站可以买全国各地的火车票。目前火车票已经实现全国联网售票,旅客可以在任意一个火 ......
【管理知识】 日期:2022-09-07
- 江苏淮安杭州汽车有多少公里数,淮安到杭州汽车要多久
本文目录一览1,淮安到杭州汽车要多久2,杭州市到淮安市有多少公里3,淮安去杭州的车程及车票是多少4,杭州到淮安做那辆车多长时间会到多少钱5,从淮安到杭州有多远1,淮安到杭州汽车要多 ......
【管理知识】 日期:2022-09-05
- 都匀东到湛江高铁,从都匀东坐高铁到湛江市能坐到那里
本文目录一览1,从都匀东坐高铁到湛江市能坐到那里2,湛江到都匀火车余票1,从都匀东坐高铁到湛江市能坐到那里截止2016年12月,都匀东至湛江暂无直达火车班次,都匀站至湛江有非高铁班 ......
【管理知识】 日期:2022-09-04
- 沪甬高铁时刻表,沪杭高铁的时间表
本文目录一览1,沪杭高铁的时间表2,求沪杭高铁上海网杭州方向时刻表3,上海到宁波宁铁高铁时刻表价格是4,宁波到上海的动车时刻表5,宁波到上海动车时刻表1,沪杭高铁的时间表高铁时刻表 ......
【管理知识】 日期:2022-09-03
- 周露露,周露露举重时喊的什么口号鼓舞自己
本文目录一览1,周露露举重时喊的什么口号鼓舞自己2,周露露韩语怎么写3,周露露的签名有哪些4,为什么有些有钱的中国人要给美国的一些大学捐钱5,请高人起名尤姓女宝宝一二年正月初十中午 ......
【管理知识】 日期:2022-09-03
相关文章
- 新机是基于Yun Os的
- 坚果地图不管用
- t1 3.1更新。
- 一个良心网站推荐
- 推荐个触控显示屏!学生党
- 手机丢了能锁死报废吗
- 有没有发现自带的耳机转接头音质提升了一大截
- 关于浏览器上网页分享到微信显示来源问题
- 华为云严选商城是什么(华为云严选商城官网)
- oppo折叠屏手机多少钱 华为折叠屏多少钱
- 手机root后怎么恢复,关键字
- 助力中小微企业快速发展,银川经济技术开发区税务局怎么样
- 中国内裤什么时候出现的,内裤什么时候传入中国
- 微软卖掉诺基亚资产,诺基亚手机卖给谁了
- lg v40 thinq,ThinQ参数
- 性价比最高的手机,手机性价比最高
- 高被引论文推荐,测绘论文发表
- 两米水深钓鱼注意什么,在池塘冰钓 水深 15米 鱼都在那里游动 是深水处 还是浅水处 一般在
- 石河子143团属于哪里,新疆维吾尔自治区石河子市143团场邮编
- Vintage到底是什么,有个女装牌子叫古什么