scanf问题

原创 2012年03月24日 14:18:48

(见帖子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

讲的蛮好的

scanf 缓冲区溢出问题

scanf 缓冲区溢出问题
  • aaajj
  • aaajj
  • 2010年08月20日 22:03
  • 2941

C中scanf()返回值问题

小石头
  • WILLIAM441
  • WILLIAM441
  • 2016年04月03日 23:31
  • 269

scanf的安全输入问题

引入:华为的一道经典面试用老师的话说,如果你脱口而出答案是5,那么你连C语言们都还没摸到,眼尖的同学会看出数组溢出了,但至于结果怎么算却搞不明白。至于大神吗,分分钟得出答案。好了别的不多扯,我们看看这...
  • kepp_smiling
  • kepp_smiling
  • 2017年08月27日 09:17
  • 284

scanf("%d\n",&num)中的\n是很特别的

这是上篇博文(http://blog.csdn.net/u010412719/article/details/48324799)中遇到的问题,详细原因明天再总结,总之,因为自己这样写了,花了很长时间才...
  • u010412719
  • u010412719
  • 2015年09月09日 22:38
  • 1056

scanf()中的%c 不能正常输入的问题

#include int main() { char a; int b; scanf("%d",&b); scanf("%c",&a); /*************...
  • u012334850
  • u012334850
  • 2014年08月04日 12:46
  • 1205

scanf的缓冲区问题

Scanf函数的缓冲区问题 scanf输入字符串、整型、实型等数据判断的方式都一样,回车、空格、tab键都认为是一个数据的结束。但是字符不同于字符串,回车,空格很可能被当成字符被输进去,要特别注意!回...
  • peixiaoge
  • peixiaoge
  • 2016年11月28日 15:02
  • 789

解决scanf或者cin造成的死循环问题

最近有个同学拿了一个程序说让我帮忙给调试一下,我拿到看了一下发现,问题确实很怪异,他在写一个console程序并且希望能有一个简单的菜单,用户输入0-5之间的整数进行选择,输入错误会输出提示信息并要求...
  • u011006816
  • u011006816
  • 2014年08月06日 00:13
  • 947

scanf遇空格后继续输入

如何让scanf()函数正确接受有空格的字符串?如: I love you!      #include   int main()   {   char str[8...
  • nopoppy
  • nopoppy
  • 2016年09月18日 21:59
  • 3289

cin和scanf的效率差异

cin和scanf的效率差异 最近在在OJ上水了一道算法题,提交总是TLE(time limit:1000MS)总以为是自己的算法不够优化,无论怎么努力始终过不了,有种崩溃的感觉。无意间把cin换成了...
  • u012328159
  • u012328159
  • 2016年03月05日 13:02
  • 1247

c语言scanf缓冲区问题

今天在递归调用scanf函数获取输入的字符时发现的这个问题,之前也遇到过,现提出来记录一下。 测试用例如下: #include #include int main() { int...
  • CaryaLiu
  • CaryaLiu
  • 2012年10月23日 16:09
  • 2943
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:scanf问题
举报原因:
原因补充:

(最多只允许输入30个字)