gets与scanf与EOF

一、fgets函数

https://blog.csdn.net/daiyutage/article/details/8540932

二、gets(str)

1. 从stdin流中读取字符串,直至接受到换行符(换行即\n或回车)或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为‘\0’空字符,并由此来结束字符串。 中途如果有空格字符,gets仍然把它当成一个字符作为输入字符串的一部分。

2. 返回值,如果读入成功,返回与str相同的指针,如果遇到错误或EOF则返回NULL

3. gets不是安全函数,在linux下fgets才是安全的函数   while(fgets(str,sizeof(str),stdin)!=NULL),fgets会将换行符号一起获取,无需额外输出换行符

三、scanf()

1. 函数返回成功读入的数据项数,读入数据时,如果遇到错误或遇到end of file,返回值为EOF。end of file为Ctrl+z (windows)或者Ctrl+d(linux)。

2. while(scanf("%d",&n)!=EOF)  ,既测试输入包含若干测试实例。当N为0时,输入结束,该实例不被处理。

牛客网上算法题目,往往有一句“本题有多组输入数据,输入到文件末尾,请使用while(cin>>)等方式读入”,这样就可以用while(scanf("%d",&n)!=EOF) ,意思是我只要不在命令行中按下ctrl+z之类的结束,我只要输入回车或空格就可以运行一次while循环体。

3. while(scanf("%d",&n)!=EOF)

(1)如果连续在终端中输入2 3 4(空格隔开)然后回车,那么n会被先后赋值为2、3、4,最后n=4.说明scanf遇到空格就结束

(2)如果是scanf("%d%d",&n1,&n2),如果连续在终端中输入2 3 (空格隔开)然后回车,那么n1=2,n2=3,注意如果%d%d如果写为%d,%d,那么输入时,要“2,3”的输入

  (3)  总之,scanf从标准输入流中获取数据,如果输入流有多个数据被空格隔开,而scanf的格式化%d或%s只有一个,那么scanf就会多次并依次地把输入流中的数据按格式赋值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值