这次来研究研究 输入与输出那些各种奇葩的事情
这次来研究研究 输入与输出那些各种奇葩的事情
char arr[100];
scanf("%10[]",arr); the 奇葩 一号
经过我鼓捣 发现 %[] 可以输入一串任何东西 包括回车 空格 ,但是不清楚如何停止
巴特 可以在[]前加一个数字 比如 %10[] 这代表 最多可以输入10个数 类比(printf)的 %10d
这样的话 %10[] 可以表示 只读取 你输入的前10个东西哦
top:C语言是输入是 将键盘输入的东西放在一个缓存中 如果 你不按回车,会一直往缓存里放东西,所以输入结束后 要按回车,把缓存流给scanf
scanf("%10[a-z A-Z 0-9]",arr); 继续奇葩
printf("%s",arr);
这个怎么说呢,打个比方,少爷喜欢吃 字母表中的字母,无论大小写,还有数字,但是如果给他别的东西,他会气的跑开,差不多这个原理。嗯~ o(* ̄▽ ̄*)o
输入只能读取[]中的字符,其他字符都会使输入提前结束
我说是[]中 所有字符,'-'是指定范围,不会当作字符看待吧。但是空格 ' ' 会!,我加空格是为了好区分,%[a-zA-Z0-9]写法比较好
printf("%s",arr);
scanf("%[^a]",arr);这个加个^ 猜猜代表什么,没错,代表'^'字符, <( ̄︶ ̄)↗[GO out!]
[^a]其实是 除了'a'以外的都可以读入, a 作为输入结束符
比如输入111111111111111111111回车 ,它会让你继续输入。。。
但是 如果 1111111111111111111a 回车,它就结束了
printf("%s",arr);
scanf("%[^abcde]",arr); 这个的话 试一试 ,会很有趣的
printf("%s",arr);
再比如
scanf("%3s",arr);
scanf("%3c",arr);
scanf("%3d",arr);
接下来就是一些小应用了
有 fflush(stdin) 可以清空输入缓存,
getchar() 直接把下一个字符get掉;
大家可以试试下面这个小程序,明明无限输入 ,巴特 试试就知道了
while(1)
{
scanf("%[a-z A-Z]",arr);
printf("%s",arr);
}
然后再试试这个
while(1)
{
scanf("%[a-z A-Z]",arr);
getchar();
printf(" the out is '%s'\n",arr);
}
还有这个
while(1)
{
scanf("%[a-z A-Z]",arr);
fflush(stdin);
printf(" the out is '%s'\n",arr);
}
找到区别没 ,发现 他们都输出一样
巴特 试试 输入 abcdef3g4h56j
(●'◡'●)
之后在试试把getchar()的那个进化一下**/
while(1)
{
int f;
f = scanf("%[a-z A-Z]",arr); top scanf 会返回一个已经输入的东西的个数,这里的东西指的是一个东西,嗯~ o(* ̄▽ ̄*)o~~~~
一个字符串 是一个东西,一个字符也是一个东西,一个数字也是一个东西,反正就是一串东西就是一个东西
getchar();
if(f!=0) printf("the out is '%s'\n",arr);
}
仔细思考一下就会发现他们之间的区别了**/
就到这里吧 ヾ(•ω•`)o**/