0

我正在尝试用 C 编写一个程序,将基数 ​​n 转换为基数 10。我有 4 个函数不包括 main:ObtainNumber、GetBase、ConvertNumberToBase10、GetMyExponential。我的主函数按以下顺序执行函数:GetBase、ObtainNumber、GetMyExponential、ConvertNumberToBase10。我的程序同时运行GetBase 函数和ObtainNumber 函数。但是,我在我的获取编号函数中使用了 scanf 函数,并且程序不会继续执行其他函数:

    long int ObtainNumber (long int myNumber)
    {

        scanf("%ld", &myNumber);
        while (myNumber > 999999999)
            {
                printf("Error. Please enter a number with no greater than 9 digits\n");
                scanf("%ld", &myNumber);
            }

        return (myNumber);

}

我想知道为什么会发生这种情况以及如何解决它?

4

1 回答 1

1

scanf()函数返回类型为 的结果int,该结果可以是成功扫描的项目数,或者EOF是出现错误时的值。您应该始终检查结果,因为scanf()可能由于程序无法控制的情况而失败。

scanf("%ld", ...)在跳过前导空格(包括换行符)后,将使用可选带符号整数常量的语法读取文本。之后的任何内容都留在输入流中。

如果没有看到更多代码和您提供的输入,就很难判断问题出在哪里。

使用scanf可能很棘手。更好的方法是fgets()读取整行输入,然后sscanf()解释其内容。通过使用fgets(),您不会留下部分输入行等待下一次调用(除非该行比输入缓冲区长),并且如果sscanf()调用失败,它不会影响输入流的状态。

注意,使用fgets()而不是 gets()gets()本质上是不安全的,永远不应使用,并且已从语言标准中删除。

于 2013-01-28T04:31:04.760 回答