c++输出语句连续执行了2次

为什么第一条输出语句连续执行了2次才到输入阶段?(初始flag1flag2均为false)把之前的代码也贴出来吧... 为什么第一条输出语句连续执行了2次才到输入阶段?(初始flag1 flag2均为false)
把之前的代码也贴出来吧
展开
 我来答
White_MouseYBZ
2013-04-09 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6642万
展开全部
代码不全,我只能说说可能原因。
在进入while前,输入缓冲区中已有一个'\n'存在,这可能是前面输入max的那个回车造成的。进入while后显示“输入字符串(不多于5个字符):“,紧接着cin.getline接收数据,这时它把那个遗留在缓冲区里的'\n'当作输入完了的结束符接收了,但getline函数不存储'\n',而是向s[0]中放一个NULL(请查看getline函数);下面n=strlen(s)当然n就为0。接下来由于n>max不成立,便执行flag2=true;再下来for语句中i<n不成立,所以一次也不循环直接又返回到while,由于flag1还为false,所以while循环成立,进入后又显示“输入字符串(不多于5个字符):“。但这一次缓冲区已无'\n',cin.getline函数就等待你输入。这就造成了你提问的结果。
要修改也容易,在cin.getline前或while前加一句fflush(stdin);,把那个该死的'\n'收掉就可以了。
你试试。供参考……
看了你刚贴上来的代码,我断定我的分析是正确的。只要前面有数据输入,就必然有回车被遗留在输入缓冲区,这处问题就必须注意改善……
追问
大神啊,太感谢了!
彤昊天9X
2013-04-09
知道答主
回答量:26
采纳率:0%
帮助的人:18.8万
展开全部

#include <iostream>

#include<string>

using namespace std; 

 

int main()

{

 bool flag1 = false;

 bool flag2 = false;

    int max = 5;

 char s[100];

    while(flag1 == false||flag2 == false)

 {

  cout<<"输入字符串(不超过"<<max<<"个字符)"<<endl;

  cin.getline(s,100);

  int n = strlen(s);

  if(n>max)

  {

   cout<<"输入不符合要求"<<endl;

   continue;

 

  }else

  {

   flag2 = true;

  }

 

 }}

 

没那个问题啊

提问题最好是把程序粘过来,截图看着不方便,调试也不方便

追问
嗯,好的,第一次提问,不熟练
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fei960922
2013-04-09 · TA获得超过381个赞
知道小有建树答主
回答量:339
采纳率:0%
帮助的人:195万
展开全部
试试分步调试?
更多追问追答
追问
呃,不会分布调试。。。初学者一个
追答
不科学不科学。。。重新编译一下试试。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式