scanf终止程序

时间:2013-01-28 03:12:35

标签: c

我正在尝试用C编写一个程序,将基数为n的数字转换为基数10.我有4个函数,不包括main:ObtainNumber,GetBase,ConvertNumberToBase10,GetMyExponential。我的main函数按以下顺序执行函数:GetBase,ObtainNumber,GetMyExponential,ConvertNumberToBase10。我的程序运行GetBase函数和ObtainNumber函数。但是,我在我的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);

}

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

1 个答案:

答案 0 :(得分:1)

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

在跳过前导空格(包括换行符)后,

scanf("%ld", ...)将使用可选带符号整数常量的语法读取文本。之后的任何内容都会留在输入流中。

如果没有看到更多的代码和您提供的输入,很难说出问题所在。

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

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