Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

Re:为什么加个空格就过了 谁能告诉我!!!

Posted by the_brothers_four at 2015-08-03 18:38:25 on Problem 1459
In Reply To:为什么加个空格就过了 谁能告诉我!!! Posted by:737363395 at 2015-01-21 00:04:18
这和scanf的机制有关,scanf读入数据时每个字符都会存到缓冲区(buffer),然后再按照指定的格式将文本转化成数据存到相应的变量内。
比如语句 
int a;
scanf("%d", &a);
假设输入是"   10    "
数字10,前后都有空格,而%d会自动忽略数字前面的空格,数字前面的空格被一一吃掉了,但后面的空格却仍存在缓冲区内,
供后续读入使用。
因此如果scanf("%d", &a); 后面紧接着的scanf语句是scanf("(%d,%d),%d", &x, &y, &z); 的话,
这时会将缓冲区内紧接着的那个字符(即空格' ')和'('比较,如果比较失败的化,就终止读入。
但如果加上了空格,就会把当前遇到的所有空白字符(包括回车、tab、空格)全都忽略(吃掉),
直到遇到第一个非空白字符再拿它和'('比较。
关于scanf的工作机制,可参考这个链接http://www.cplusplus.com/reference/cstdio/scanf/?kw=scanf,讲得比较详细。

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator