2017-09-22 303 views
0

你好,我正在尝试学习C++,我想给一个程序做一点练习。但是我在循环中使用cout时遇到了问题。当循环再次运行时,为什么不输出“请再试一次”?

这是我试图从中输出文本的循环。当用户输入一个无效的号码时,应该说“对不起再试!”

while (datecheck) 
{ 
    bool check(false); 
    if (check) 
     std::cout<<"Sorry try again!"<<std::endl; 
    std::cin>>c; 
    if (c >= 1) 
    { 
     if (b == 2 && c <= 28) 
      datecheck = false; 
     if (b == 2 && a % 4 == 0 && c <= 29) 
      datecheck = false; 
     if (b == 4 || b == 6 || b == 9 || b == 11 && c <= 30) 
      datecheck = false; 
     if (c <= 31) 
      datecheck = false; 
    } 
    check = true; 
} 

当输出和我故意让自己在循环它不输出任何

Year: -20 
-20 
-20 
+3

在循环内部,通过局部变量的初始化设置您的标志为false。那么如果它是真的,你输出。你什么时候期望产出? – Yunnosch

+0

移动行'布尔检查(false);'出while循环。和'check = true;'应该是其他条件的一部分。 – MKR

+0

等待我很笨。我猜是什么时候重新启动循环并将该标志声明为false。我的错。多谢你们。 – amgtree

回答

0

您在迭代声明一个全新的可变check。并且您每次都将该变量初始化为false。所以在while循环之前移动该声明。

更改此:

while (datecheck) 
{ 
    bool check(false); 
    ... 
    check = true; 
} 

这样:

bool check(false); 
while (datecheck) 
{ 
    ... 
    check = true; 
} 
+0

我认为它在循环结束时执行@MKR。 – gsamaras

+0

如果我运行一个类似的循环,每次都做同样的事情,我是否必须重新声明变量为false? – amgtree

+2

好吧,我解决了代码时遇到了这个问题。再次感谢!我还有一个关于 另一个代码片段的问题。我应该问一个新问题,或者我应该问什么? – amgtree

-1

的问题是与bool check(false);声明。这将继续在每次迭代开始时将值重新分配给false

一个简单的修复可能是摆脱check变量的使用,只能使用datecheck

bool datecheck(true); 
while (true) 
{ 
    std::cin>>c; 
    if (c >= 1) 
    { 
     if (b == 2 && c <= 28) 
      datecheck = false; 
     if (b == 2 && a % 4 == 0 && c <= 29) 
      datecheck = false; 
     if (b == 4 || b == 6 || b == 9 || b == 11 && c <= 30) 
      datecheck = false; 
     if (c <= 31) 
      datecheck = false; 
    } 
    if (datecheck) 
    { 
     std::cout<<"Sorry try again!"<<std::endl; 
    } 
    else 
    { 
     break; 
    } 
} 
+0

@云诺斯有效点! – MKR

+1

你想添加一个解释到你的代码专用答案吗?创建StackOverflow是免费编码服务的印象在这里并不是很受欢迎。 – Yunnosch

相关问题