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

do while 循环有关问题

2012-05-01 
do while 循环问题最近碰到一个问题,其中用到基本的do {}while( )循环;它的测试小程序为#include stdio.

do while 循环问题
最近碰到一个问题,其中用到基本的do {}while( );循环 ;它的测试小程序为
#include <stdio.h>
int main(
{
  char k;
do
{
printf("你还要继续分配资源么? y or n \n");
scanf("%c",&k);

}while(k =='y');

  return 0;
}

我想的是:输入y就会继续循环里面的东西,而输入其他的就会结束循环!
问题:无论我输入y 还是 n 程序都会结束!
测试: 当我输入n时,程序马上结束!这与我想的相同,,,,但是当我输入y时它第二次进入循环时, 执行scanf("%c",&k);
语句时,它会自动付一个值,完全不理会我!!然后就结束循环!!不知道是为什么!

跪求具体原因!!



[解决办法]
用scanf,getchar等读取字符串或者字符的时候容易出现缓冲区残留'\n'的情况。
于是下次读取的时候,就会读取到'\n'.
为了防止这种情况,可以在scanf/getchar函数之前加下面三条语句之一:
标准:rewind(stdin);
windows扩展:fflush(stdin);
暴力:stdin->_cnt=0;

所以你的代码改为:

C/C++ code
#include <stdio.h>int main({  char k;do{printf("你还要继续分配资源么? y or n \n");scanf("%c",&k);rewind(stdin);}while(k =='y');  return 0;}
[解决办法]
探讨

用scanf,getchar等读取字符串或者字符的时候容易出现缓冲区残留'\n'的情况。
于是下次读取的时候,就会读取到'\n'.
为了防止这种情况,可以在scanf/getchar函数之前加下面三条语句之一:
标准:rewind(stdin);
windows扩展:fflush(stdin);
暴力:stdin->_cnt=0;

所以你的代码改为:
C/C++ code

……

[解决办法]
正解
探讨
用scanf,getchar等读取字符串或者字符的时候容易出现缓冲区残留'\n'的情况。
于是下次读取的时候,就会读取到'\n'.
为了防止这种情况,可以在scanf/getchar函数之前加下面三条语句之一:
标准:rewind(stdin);
windows扩展:fflush(stdin);
暴力:stdin->_cnt=0;

所以你的代码改为:

C/C++ code
……

[解决办法]
探讨
呵呵,谢谢了!
但是对于rewind(stdin);语句不怎懂!我今年大二了,感觉好多都不懂!!对于你说的那些我该到哪去学习呢?

[解决办法]
scanf("%c",&k);
把这句改成scanf("%*c%c", &k);试试。
[解决办法]
探讨

呵呵,谢谢了!
但是对于rewind(stdin);语句不怎懂!我今年大二了,感觉好多都不懂!!对于你说的那些我该到哪去学习呢?

[解决办法]
#include <stdio.h>
#include <conio.h>
int main(
{
char k;
do
{
printf("你还要继续分配资源么? y or n \n");
k = getch();
}while(k =='y');

return 0;
}
[解决办法]
是‘\n’的问题。。。
[解决办法]
顶起来,多查查标准库
[解决办法]
fflush是不行了,它只作用于输出。
[解决办法]
先执行再循环

热点排行