cin和scanf在使用时的注意事项Word文档下载推荐.docx
- 文档编号:16155698
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:12
- 大小:94KB
cin和scanf在使用时的注意事项Word文档下载推荐.docx
《cin和scanf在使用时的注意事项Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《cin和scanf在使用时的注意事项Word文档下载推荐.docx(12页珍藏版)》请在冰豆网上搜索。
,注意哦!
你可以试一下。
输入时在前面猛打回车,然后再输入一组字符,这样输出的还是你输出的字符。
如下图:
2试完了回车,重新运行一下,然后你在前面加n个空格,然后再输入一个连续的字符,看看会出现什么?
你会发现他把前面的空格全忽略了。
如果你想要,当然也可以,或者用正则表达式,或者用gets();
比如:
gets(a);
这样,你输入的空格也能记录下来了。
3,再试一下输入一个连续长度的字符后加一个空格再输入:
比如输入一个人的名字的时候“BillGates”你会发现输出只有Bill,而Gates见鬼去了。
所以名字的输入和上面一样,最好用gets();
函数。
这请弄明白了再往下看。
谢谢合作!
(2)scanf("
%c"
&
a);
//注意取地址符;
chara;
//输出字符a中的字符
在获得字符时如果有回车,吸收之。
你可以这样试一下,运行上面的程序,回车一次,仔细观察他空了几行。
(第一行是你敲的,第二行是printf输出的a的值),明白其中的奥妙了么?
(3)scanf("
%d"
例
inta;
//输出整形a中的值;
这个输入和
(1)一样,会自动忽略前面的回车'
(其实就是个ascII码)。
弄明白了以上三个使用方法,看看下面这个程序的输出结果是什么?
例1
输入如下:
输出:
明白了?
没明白再看看前面的然后再往下看;
例2,
源程序:
输入:
看到了么?
输入80回车后直接跳过对b的输入跳到printf(“%d\n”,a);
去了,输出a后再输出b,现在的b就是一个回车’\n’还记得么?
这样,后面跟着两个回车,然后输出了“Pressanykeytocontinue”
你会发现%s和%d是以’\n’当做输入的结束,而不吸收’\n’,所以当给b赋值时由于上次输入留下的’\n’没有被吸收,%c就要上它了。
导致你没有输入b的值就直接出结果了。
你可以把上面的首先给int赋初值改成给一个字符串赋初值,后面跟一个给char型字符覆初值。
你会发现同样的问题。
%c真是来者不拒,呵呵。
这儿非常重要,一定要搞明白了再继续往下看。
二,cin
它用起来要比scanf简单多了。
chari;
charb[20];
intc;
cin>
>
i;
//给字符赋值
b;
//给字符串赋值
c;
//给整形赋值
cin和scanf在使用时要特别注意!
请跟我走;
输入
这一点和scanf是一样地;
例2
还是上面那个程序,输入
输出
这一点和scanf也一样
例3
还是上面的那个程序,输入
跟scanf一样…………那到底哪不一样呢…………
接着往下看;
你先猜猜结果是啥?
如果是scanf,那肯定是输入完abcdef后回车,就输出结果了。
输出结果:
失望了吧,它在等你输入b的值那!
当随便输入一个后,结果如下:
怎样?
看出点猫腻了吧?
cin和scanf就差这了。
把上面程序换成一个int型和一个char型,先给int赋值,再给char赋值,也会出现相同的情况,不会像scanf直接跳过去,即使你狂按回车,他照样依然不动声色。
看完了上面这些,再来看一个实例吧。
(这是咱们网赛时第二题)
TimeLimit:
1SecondMemorylimit:
32Megabyte
Totalsubmit:
129Accepted:
31
xiaoAisabeautifulgirl,andshehassomanyskirtsthatshewon'
twearaskirtasecondtimebeforetheskirtiswashed.NowxiaoAwantstogoshopping,howmanyskirtsshecanchoosetowear?
Inordertodistinguishtheseskirts,shegivesouteveryskirtwithauniquename.
Input
ThefirstlineofinputcontainsapositiveintegerT(T<
=100),thenumberoftestcases.
EachtestcasecontainstwointegersNandM(1<
=N,M<
=100)inthefirstline.
Nisthenumberofskirts.Misthenumberofoperations.
ThenNlinesfollow.Everylinecontainsawordandthewordisnotlongerthan10.
ThenMlinesfollow.Eachlinecontainsacharacter'
D'
or'
W'
andthenameofaskirt.
'
indicatesthatxiaoAhasworetheskirt.'
indicatesthatxiaoAhaswashedtheskirt.
Output
AftertheMoperations,youneedtooutputthathowmanyskirtscanbechosenbyxiaoAtowear.
SampleInput
1
55
SkirtA
SkirtB
SkirtC
SkirtD
SkirtE
DSkirtA
DSkirtB
DSkirtC
DSkirtD
WSkirtA
SampleOutput
2
大意:
一个女生有巨多衣服,她有个癖好,不穿穿过的没有洗过的衣服,现在给她有的衣服取个名字,然后告诉你怎么对衣服操作,D就是穿过了,W就是洗了。
下面是源代码(有错!
!
)注意输入!
WSkirtA中间有一个空格。
#include<
stdio.h>
memory.h>
string.h>
intT;
intaa[100],i,j,can;
charta;
chartb[11];
intnum,opr;
chars[100][11];
T);
while(T--){
memset(aa,0,sizeof(int)*100);
//这几个的作用是清空这几个指针对应的内存地址
memset(s,0,sizeof(char)*1100);
memset(tb,0,sizeof(char)*11);
can=0;
scanf("
%d%d"
num,&
opr);
for(i=0;
i<
num;
i++){//获得衣服的名字,由于题目说了,是aword所
scanf("
s[i]);
//以用考虑像BillGates那样的。
}
//下面的作用是输入opration然后判断是穿还是洗
opr;
i++){
ta);
//就在这!
由于上面是%s所以‘\n’留下了,这时char
tb);
//把它吸收了,导致出错。
要修正的话,只要加个能吸收
if(ta=='
){//’\n’的东西就行了,比如getchar();
或cin.ignore();
都可以
for(j=0;
j<
j++){//吸收一个字符。
if(strcmp(s[j],tb)==0)
break;
}
(j!
=num)?
aa[j]=1:
0;
}
else{
j++){
if(j!
=num)
aa[j]=0;
if(aa[i]==0)
can++;
printf("
%d\n"
can);
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- cin scanf 使用 注意事项