关闭

scanf问题

295人阅读 评论(0) 收藏 举报

(见帖子http://topic.csdn.net/u/20120229/16/711e7609-1605-4965-ab24-11e5a935cc9b.html):

问题:


#include <stdio.h>
int main()
{
    int i ;
    char a[5] ;
    for(i = 0 ; i < 5 ; i++)
    {
        scanf("%c ",a + i) ;        
    }
    for(i = 0 ; i < 5 ; i++)
    {
        printf("%c ", a[i]);
    }
}
代码很简单。我要实现的功能:
输入:a b c d e
输出:a b c d e
很显然我的代码有问题,在我的基础上改改看,必须得用for循环,必须的用到参数i。这个scanf以前只知道用,一直没有好好研究它。


答:

有一个正确修改,把空格放%c前面:

  int i ;
  char a[5] ;
  for(i = 0 ; i < 5 ; i++)
  {
  scanf(" %c", a + i) ;   
  }
  for(i = 0 ; i < 5 ; i++)
  {
  printf("%c ", a[i]);
  }

其实,这涉及到空白符的问题!

"%c " 这里的空格不单指一个空格,而是所有的后继空白符。空格,制表,换行都是空白符。%c后面的空格吃掉了所有的空白符

要是下面这些输入,上面的代码也都能结束。  

a b c d ef
-------------------
a b c d e f
-----------------------
a b c d e  

f
----------


可以研究研究这个:

#include <stdio.h>

int main(void)
{
    int i ;
    char a[5] ;

    scanf("%c ", a + 0) ;    
    scanf("%c ", a + 1) ;  
    scanf("%c ", a + 2) ;  
    scanf("%c ", a + 3) ;  
    scanf("%c", a + 4) ;  /* 还是最后的一个输入有问题,就如楼上说的,那个" "吃掉了后面所输     入的空格和我按下的enter键。*/

    for(i = 0 ; i < 5 ; i++)
    {
        printf("%c ", a[i]);
    }
    printf("\n") ;

    return 0 ;
}

最后给一个百度百科中的scanf函数链接:http://baike.baidu.com/view/1390039.htm

讲的蛮好的

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:217200次
    • 积分:3262
    • 等级:
    • 排名:第10393名
    • 原创:114篇
    • 转载:37篇
    • 译文:0篇
    • 评论:23条
    最新评论