Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 扫描终止程序_C - Fatal编程技术网

C 扫描终止程序

C 扫描终止程序,c,C,我正试图用C语言编写一个程序,将基数n转换为基数10。我有4个不包括main的函数:ObtainNumber、GetBase、ConvertNumberToBase10、GetMyExponential。我的主函数按以下顺序执行函数:GetBase、GetainNumber、GetMyExponential、ConvertNumberToBase10。我的程序同时运行GetBase函数和AcquinNumber函数。但是,我在AcquinNumber函数中使用了scanf函数,程序不会继续执行其

我正试图用C语言编写一个程序,将基数n转换为基数10。我有4个不包括main的函数:ObtainNumber、GetBase、ConvertNumberToBase10、GetMyExponential。我的主函数按以下顺序执行函数:GetBase、GetainNumber、GetMyExponential、ConvertNumberToBase10。我的程序同时运行GetBase函数和AcquinNumber函数。但是,我在AcquinNumber函数中使用了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);

}
我想知道为什么会发生这种情况,以及如何修复它?

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

scanf(“%ld”,…)
将在跳过前导空格(包括换行符)后,读取具有可选带符号整数常量语法的文本。输入流中剩下的任何内容

如果看不到更多的代码和输入,就很难判断问题出在哪里

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


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

当你说程序不能继续执行其他功能时,你是什么意思?您知道,在调用scanf()时,它会等待用户通过stdin输入,对吗?如果不是这样的话,我们需要更多的细节和/或代码来帮助您。您是否考虑过在第一次失败后吃掉输入缓冲区中的换行符<代码>%ld“,例如?您没有检查
scanf()的返回结果这一事实本身就是一个问题。它可能返回0,表示未分析任何值。的可能重复