为什么当循环再次运行时,此输出"请重试"?
Why doesn't this output "Please try again" when loop runs again?
你好,我正在尝试学习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
您在中声明一个新的变量check
。并且您每次都将该变量初始化为false
。因此,在段循环之前移动该声明。
更改此内容:
while (datecheck)
{
bool check(false);
...
check = true;
}
:
bool check(false);
while (datecheck)
{
...
check = true;
}
问题是 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;
}
}
相关文章:
- 将标准输出重定向到ostream
- 在程序执行期间从标准输出重定向到自定义流
- 将 Tcl 中的命令输出重定向到文件时,文件以 DOS 格式生成
- 将 Linux system() 调用命令的输出重定向到仅可变的
- 将 ffmpeg 控制台输出重定向到C++中的字符串或文件
- Win32 GUI C(++) 应用将标准输出和标准输出重定向到磁盘上的同一文件
- C libcurl错误重试
- 将线程之间的标准输入/输出重定向
- GDB Cygwin 不会将输出重定向到文件
- 如何将 printf 流输出重定向到.csv文件
- 为什么当循环再次运行时,此输出"请重试"?
- 将PowerShell.exe的输入和输出重定向到C 中的管道
- Windows Batch - 如何在将标准输出重定向到文件时添加时间戳
- 网络tcp套接字应用程序重试方法
- 正在重试包含同一异常的exception_ptr的多个实例
- 将一个进程标准输出重定向到管道将产生不同的运行结果
- 如何将我的应用程序生成的标准 Mac OS X 日志输出重定向到文件
- 未收到确认时如何执行数据包重试
- 出现异常后重试本地静态变量初始化
- 正在将控制台输出重定向到同一解决方案中的MFC屏幕输出