c++输出语句连续执行了2次
为什么第一条输出语句连续执行了2次才到输入阶段?(初始flag1flag2均为false)把之前的代码也贴出来吧...
为什么第一条输出语句连续执行了2次才到输入阶段?(初始flag1 flag2均为false)
把之前的代码也贴出来吧 展开
把之前的代码也贴出来吧 展开
3个回答
展开全部
代码不全,我只能说说可能原因。
在进入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'收掉就可以了。
你试试。供参考……
看了你刚贴上来的代码,我断定我的分析是正确的。只要前面有数据输入,就必然有回车被遗留在输入缓冲区,这处问题就必须注意改善……
在进入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'收掉就可以了。
你试试。供参考……
看了你刚贴上来的代码,我断定我的分析是正确的。只要前面有数据输入,就必然有回车被遗留在输入缓冲区,这处问题就必须注意改善……
追问
大神啊,太感谢了!
展开全部
#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;
}
}}
提问题最好是把程序粘过来,截图看着不方便,调试也不方便
追问
嗯,好的,第一次提问,不熟练
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
试试分步调试?
更多追问追答
追问
呃,不会分布调试。。。初学者一个
追答
不科学不科学。。。重新编译一下试试。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询