首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

scanf和gets,该如何解决

2012-02-19 
scanf和gets#includestdio.h #includestring.h main(){charm[30] 我的名字是 ,b[10],ifor(i0i

scanf和gets
#include   "stdio.h "
#include   "string.h "
main()
{
        char   m[30]= "我的名字是 ",   b[10],i;
        for(i=0;i <5;i++)
          {printf( "请输入您的名字:\n ");
          scanf( "%s ",b);
          strcat(m,b);
          if   (   !   strcmp(   b, "123 "   )   )
        printf( "   酷酷虫 "   );
else   if   (   !strcmp(   b, "虫酷酷 "   )   )
      printf(   m, "%s,我是笨蛋!   "   );

    getch();}
}        
   
/*这段程序,前次输入的名字不能自动清除*/


#include   "stdio.h "


main()
{       char   b[10];
        int   i;
        for(i=0;i <5;i++)
        {
        printf( "你的名字:\n ");
        gets(b);
        if   (strcmp(b, "123 ")==0)

            printf( "%s是天才!\n ",b);
        else
              printf( "我的名字是%s,我是笨蛋!\n ",b);
        getch();   }
}  


问题就是第一个程序如果输入了一次名字,后面再输入,前次的名字不会消失,第二个程序则不会
    这是scanf   和   gets的差别吗?如果是的话,请说明他们的不同之处和原理.
    如果不是这的问题,那又是哪出的差子呢?

[解决办法]
第一个程序中strcat(m,b)的问题;

[解决办法]
第一个程序中,当执行strcat(m,b);后,m[30]= "我的名字是 "+b。
用以下验证就知道了。


#include "stdio.h "
#include "string.h "
main()
{
char m[30]= "我的名字是 ", b[10],i;
for(i=0;i <3;i++)
{printf( "请输入您的名字:\n ");
scanf( "%s ",b);
strcat(m,b);
printf( "%s\n ",m); //看看此时数组m的值。
if ( ! strcmp( b, "123 " ) )
printf( " 酷酷虫\n " );
else
printf( m, "%s,我是笨蛋! ");

getch();}
}

热点排行