首页 > 解决方案 > "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,但它仍然会被打印出来!

标签: cfunctionreturnmainc99

解决方案


如果我正确理解了您的错误,那么当您输入 1(它成为 MatrixSize 的值)然后输入 4.5 时,您似乎会遇到错误。由于 MatrixSize 为 1,因此您的代码将扫描 4 以查找第一个矩阵中的值(也是唯一值)。然后该函数将返回 true,并且由于未检测到错误,将使用第二个矩阵调用 FillMatrix。.5 仍然存在于标准输入中,这就是产生错误的地方(第二个矩阵的 FillMatrix 调用中的第一个 scanf)。

您提到的问题只会出现在矩阵的最后一个输入上。避免此问题的一种方法是将输入作为字符串读入并检查是否可以将其解析为整数。


推荐阅读