繁体   English   中英

scanf终止程序

[英]scanf Terminating Program

我试图用C编写一个将n的基数转换为10的程序。我有4个不包括main的函数:ObtainNumber,GetBase,ConvertNumberToBase10,GetMyExponential。 我的主要功能按以下顺序执行功能: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);

}

我想知道为什么会这样,如何解决?

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

在跳过开头的空格(包括换行符)之后scanf("%ld", ...)将使用可选的带符号整数常量的语法读取文本。 输入流中剩下的所有内容。

如果没有看到更多代码和输入内容,就很难说出问题所在。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM