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

关于 fflush(stdin); 的有关问题.

2012-03-26 
关于fflush(stdin) 的问题...题目:删除字符串中指定位置m上开始的n个字符,删除的位置用空格代替,并输出。#

关于 fflush(stdin); 的问题...
题目:删除字符串中指定位置m上开始的n个字符,删除的位置用空格代替,并输出。#include   "stdio.h "
main()
{
    int   i,m,n;
    char   c,s[100];
    printf( "Please   input   a   string:\n ");
    gets(s);
    printf( "Please   input   m,n:\n ");
    scanf( "%d,%d ",&m,&n);
    printf( "You   will   delete   the   element   from   s[%d]   to   s[%d]   in   array   s,are   u   sure(Y/N)? ",m,m+n-1);
fflush(stdin);  
    c=getchar();
    if((c== 'y ')||(c== 'Y '))
    {
      for(i=m;i <=m+n-1;i++)
    s[i]= '   ';
      puts(s);
    }
    else  
    puts(s);
}

fflush(stdin);   说明是因为当你输入值的时候,内存地址已经占满了,所以要清除里面的内存,还有什么越界什么的,不懂啊,内存怎么这么容易就满拉....才几个字符嘛。。这么浅。。。前辈给指点下谢谢拉,贴个文献什么的也好   ,谢谢


[解决办法]
main()
{
int i,m,n;
char c,s[100];
printf( "Please input a string:\n ");
gets(s); // 读取一行,把回车也读取了。
printf( "Please input m,n:\n ");
scanf( "%d,%d ",&m,&n); // 注意这里,如你输入了2, 3最后是不是要按一个回车?
// 以让程序接收输入的数字。正因为这个回车没有被读取(因读取的是数字),还保存在缓存中的,所以当下一步输出 "You will... "后,在缓存中的这个回车被赋给了下一步需要的c(c = getchar()),所以c就是一个回车,即c是不等于y或Y的。所以这里用了一个fflush(stdin)把缓存中的数据清空,以让下一步输入的字符是想要的,其实也可以不要fflush(stdin)这个语句,而用两次c = getchar(),则第一个回车被第一次c = getchar()得到,下一次的c = getchar()正是我们需要输入的真正数据了。

printf( "You will delete the element from s[%d] to s[%d] in array s,are u sure(Y/N)? ",m,m+n-1);
fflush(stdin);
c=getchar(); // 再加一句c = getchar();
if((c== 'y ')||(c== 'Y '))
{
for(i=m;i <=m+n-1;i++)
s[i]= ' ';
puts(s);
}
else
puts(s);
}

热点排行
Bad Request.