scanf()的用法总结
最近在刷PTA数据结构时,发现自己对于scanf()的用法还不是很熟练,写下此篇做一记录。
1、scanf() 读入数字
如果是只用sacnf()
读入数字的话比较简单。
可以分为以下集中情况:
1.1 在一行中,读入数字
假设读入三个:
用scanf("%d%d%d",&a,&b,&c);
来处理就足够了。
1.2 在多行中,读入数字
假设读入两行:
1 2 3
4 5 6
因为读入的是数字,scanf()
可以自动忽略空格和换行符,所以不需要特别的处理,和上面一样就行。
scanf("%d%d%d",&a,&b,&c);
1.3 读入数字时,有特殊的要求
例如:
要读入以下的数据,得到年月日。
2019-10-3
因为里面有-
字符所以你没有办法直接的把数据读进来,但幸运的是scanf()
给了我们一种简单的方法来处理这种情况。
scanf("%d-%d-%d",&a,&b,&c);
,这样你就可以得到年月日,也就是a,b,c。
这样做的原因是,在scanf()
里面写了什么,在输入时就要原样的输入,即在scanf()
里面写了-
,输入的时候也要在那个位置加上-
。
2、scanf() 读入字符
相较于读入数字,读入字符就比较麻烦些。
1.1 在一行中,读入字符
例如:
读入一下的数据,数据间用空格隔开。
a b c d
因为现在读入的是字符,空格和换行符都属于字符,所以我们采用
1.3的方法来读入数据scanf("%c %c %c",&a,&b,&c);
。
或者用scanf("%c%c%c%c%c",&a,&unused1,&b,&unused2,&c);
来读取,中间定义了两个字符unused1和unused2
来读取空格。
1.2 在多行中,读入字符
这里和1.2在多行中,读入数字的主要的区别,就是要处理行末的换行符,下面介绍两种方法来处理这个,假设要输入以下的数据:
a d
c d
(1) 用getchar()
来处理换行符
char a,b,c,d;
scanf("%c %c",&a,&b);
getchar();
scanf("%c %c",&c,&d);
getchar();
(2) 用scanf()
自行处理
char a,b,c,d;
scanf("%c %c\n",&a,&b);
scanf("%c %c\n",&c,&d);
但是第二种方法,近几天不知道为什么在我的电脑上要多输入一次数据才可以正确的运行,前几天还可以正常的读入数据,不过在PTA上提交却没有问题。
3、scanf() 读入字符串
读入字符串比较简单,其中要注意的是,读入的字符串中不能有空格。如果有空格,就在空格处停止。
如果要读入空格一个可行的方法就是用scanf("%[^\n]",s);
来处理,这个表达式的意思是遇到换行符才停止读入,其中scanf()
中[]
里面^
后面就是你要停止读入的字符,如把\n
换成s
意思就是遇到s
就停止读入。
同时在^
的后面可以放很多的字符,例如scanf("%[^sdf]",s);
,意思就是遇到里面的任一个字符都停止读入。
初学者,如果有遗漏或错误,请见谅。同时欢迎与我沟通交流。
好了今天记录下这些,剩下的以后再说。
附上我的GitHub地址:https://github.com/wxh-123/PTA-Coding.
还有个人博客:https://wxh-123.github.io/.
上面上我做的PTA题目的一些AC代码。