c - "return false" 被忽略不被返回
问题描述
注意:我已经编辑了我的代码,以提供清晰且最少的步骤来重现错误。 我使用 C99 标准编写了以下代码:
#include <stdio.h>
#include <stdbool.h>
bool FillMatrix(int MatrixSize, int Matrix[][10])
{
int CellValue=0;
for (int i=0;i<MatrixSize;i++)
{
for (int j = 0; j < MatrixSize; j++)
{
if (scanf("%d",&CellValue) == 0)//Check if User provided un-integer value
{
printf("Error\n");
return false;//Her's the problem
}
else
{
Matrix[i][j] = CellValue;
}
}
}
return true;
}
int main()
{
int MatrixSize=0;
scanf("%d",&MatrixSize);
int FirstMatrix[10][10],SecondMatrix[10][10];
printf("First:\n");
if (!FillMatrix(MatrixSize,FirstMatrix)) return 0;
printf("Second:\n");
if (!FillMatrix(MatrixSize,SecondMatrix)) return 0;
printf("Hello");
return 0;
}
当我提供1
作为第一个输入然后4.5
我可以Error
在屏幕上看到但也可以看到Second:
我的代码有什么问题?在打印之前Second
,我已经要求验证它FillMatrix(...)
没有返回 false,但它仍然会被打印出来!
解决方案
如果我正确理解了您的错误,那么当您输入 1(它成为 MatrixSize 的值)然后输入 4.5 时,您似乎会遇到错误。由于 MatrixSize 为 1,因此您的代码将扫描 4 以查找第一个矩阵中的值(也是唯一值)。然后该函数将返回 true,并且由于未检测到错误,将使用第二个矩阵调用 FillMatrix。.5 仍然存在于标准输入中,这就是产生错误的地方(第二个矩阵的 FillMatrix 调用中的第一个 scanf)。
您提到的问题只会出现在矩阵的最后一个输入上。避免此问题的一种方法是将输入作为字符串读入并检查是否可以将其解析为整数。
推荐阅读
- javascript - 在父组件之前反应子组件渲染
- python - 比较 reddit 帖子标题不起作用
- python - Python透明图像遮罩
- python - django电子邮件验证问题
- android - 使用 detox CoordinatorLayout 错误测试本机应用程序
- autohotkey - 使用标志在 Autohotkey 中切换热键
- ios - 如何在 UIStackView 中设置 UIView 的背景颜色?
- javascript - Gulp-sass 不是管道
- android - Android FlexBox-Layout 自定义 - 列标准限制
- html - CSS 方向(横向|纵向)未按预期工作