scanf的一些技巧

一、scanf和gets

1.不同点:

  char string[50];

  scanf("%s",string); //当遇到回车,空格和tab键会自动在字符串后面添加'\0',但是不能接受回车,空格和tab键,他们仍会留在输入的缓冲区中。

  gets(string); //遇到回车认为输入结束,并用'\n'替代 '\0'.回车键不会留在输入缓冲区中

2.相同点:

  字符串接受结束后自动加'\0'。

二、scanf("%c",&c) 与 scanf(" %c",&c)

  后者只是在%前多了个空格,似乎没有什么区别,但使用起来区别是很大的。scanf()作单字符输入时规定只接收一个字符,但它却把回车符也作为字符对待的。这就造成程序中只有一个输入字符的scanf()语句时,问题还不大,但如果后面还跟着第二个scanf()字符输入语句,这个scanf()就把前面输入的回车符当作输入字符了。这就在输入逻辑上造成了混乱,达不到人们预期的愿望。有了这个空格,因为scanf()是跳过空格读字符的,就回避了这个问题。实践证明,这个空格放在%c后面也不能达到目的。应当说,这也是比较巧妙的应用!

三、scanf("%d",&n) 与 scanf("%d ",&n)

  这个是利用了上面二中的方法,如果程序scanf("%d",&n)之后要读char,会把读入n之后的空格读进ch,而scanf("%d ",&n)这里d后面多个空格,就相当于后面%c前多了个空格,不管是scanf("%c",&ch)还是ch=getchar(),都可以跳过那个回车。

 

posted @ 2015-12-18 13:19  水郁  阅读(555)  评论(0编辑  收藏  举报
……