cin和scanf在使用时的注意事项.docx

上传人:b****5 文档编号:3250137 上传时间:2022-11-21 格式:DOCX 页数:12 大小:94KB
下载 相关 举报
cin和scanf在使用时的注意事项.docx_第1页
第1页 / 共12页
cin和scanf在使用时的注意事项.docx_第2页
第2页 / 共12页
cin和scanf在使用时的注意事项.docx_第3页
第3页 / 共12页
cin和scanf在使用时的注意事项.docx_第4页
第4页 / 共12页
cin和scanf在使用时的注意事项.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

cin和scanf在使用时的注意事项.docx

《cin和scanf在使用时的注意事项.docx》由会员分享,可在线阅读,更多相关《cin和scanf在使用时的注意事项.docx(12页珍藏版)》请在冰豆网上搜索。

cin和scanf在使用时的注意事项.docx

cin和scanf在使用时的注意事项

cin和scanf在使用时的注意事项

(注:

本文中的源代码没有包含头文件,实验时请自己编辑。

请边看边操作,这样才能真正明白其中的窍门:

一,scanf():

常用的有

(1)scanf("%s",a);//a为字符串的指针;

例:

intmain(){

chara[20];

scanf("%s",a);

printf("%s",a);//输出字符串a中的字符

return0;

}

注意:

1,这种获得字符串的方法前面可以有回车符'\n',注意哦!

你可以试一下。

输入时在前面猛打回车,然后再输入一组字符,这样输出的还是你输出的字符。

如下图:

2试完了回车,重新运行一下,然后你在前面加n个空格,然后再输入一个连续的字符,看看会出现什么?

你会发现他把前面的空格全忽略了。

如果你想要,当然也可以,或者用正则表达式,或者用gets();比如:

gets(a);这样,你输入的空格也能记录下来了。

如下图:

3,再试一下输入一个连续长度的字符后加一个空格再输入:

比如输入一个人的名字的时候“BillGates”你会发现输出只有Bill,而Gates见鬼去了。

所以名字的输入和上面一样,最好用gets();函数。

如下图:

这请弄明白了再往下看。

谢谢合作!

(2)scanf("%c",&a);//注意取地址符;

例:

intmain(){

chara;

scanf("%c",&a);

printf("%c",a);//输出字符a中的字符

return0;

}

注意:

在获得字符时如果有回车,吸收之。

你可以这样试一下,运行上面的程序,回车一次,仔细观察他空了几行。

(第一行是你敲的,第二行是printf输出的a的值),明白其中的奥妙了么?

(3)scanf("%d",&a);

intmain(){

inta;

scanf("%d",&a);

printf("%d",a);//输出整形a中的值;

return0;

}

注意:

这个输入和

(1)一样,会自动忽略前面的回车'\n'(其实就是个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简单多了。

intmain(){

chari;

charb[20];

intc;

cin>>i;//给字符赋值

cin>>b;//给字符串赋值

cin>>c;//给整形赋值

}

注意:

cin和scanf在使用时要特别注意!

请跟我走;

例1

输入

输出:

这一点和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.

'D'indicatesthatxiaoAhasworetheskirt.'W'indicatesthatxiaoAhaswashedtheskirt.

Output

AftertheMoperations,youneedtooutputthathowmanyskirtscanbechosenbyxiaoAtowear.

SampleInput

1

55

SkirtA

SkirtB

SkirtC

SkirtD

SkirtE

DSkirtA

DSkirtB

DSkirtC

DSkirtD

WSkirtA

SampleOutput

2

大意:

一个女生有巨多衣服,她有个癖好,不穿穿过的没有洗过的衣服,现在给她有的衣服取个名字,然后告诉你怎么对衣服操作,D就是穿过了,W就是洗了。

下面是源代码(有错!

)注意输入!

WSkirtA中间有一个空格。

#include

#include

#include

intmain(){

intT;

intaa[100],i,j,can;

charta;

chartb[11];

intnum,opr;

chars[100][11];

scanf("%d",&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

scanf("%s",s[i]);//以用考虑像BillGates那样的。

}

//下面的作用是输入opration然后判断是穿还是洗

for(i=0;i

scanf("%c",ta);//就在这!

由于上面是%s所以‘\n’留下了,这时char

scanf("%s",tb);//把它吸收了,导致出错。

要修正的话,只要加个能吸收

if(ta=='D'){//’\n’的东西就行了,比如getchar();或cin.ignore();都可以

for(j=0;j

if(strcmp(s[j],tb)==0)

break;

}

(j!

=num)?

aa[j]=1:

0;

}

else{

for(j=0;j

if(strcmp(s[j],tb)==0)

break;

}

if(j!

=num)

aa[j]=0;

}

}

for(i=0;i

if(aa[i]==0)

can++;

}

printf("%d\n",can);

}

return0;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 判决书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1