[英]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.