读书人

scanf和gets,该如何解决

发布时间: 2012-02-19 19:43:39 作者: rapoo

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();}
}

读书人网 >C++

热点推荐