我正在尝试用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);
}
我想知道为什么会发生这种情况以及如何解决这个问题?
答案 0 :(得分:1)
scanf()
函数返回int
类型的结果,该结果是成功扫描的项目数,如果出现错误则返回值EOF
。您应始终检查结果,因为scanf()
可能因程序无法控制的情况而失败。
scanf("%ld", ...)
将使用可选带符号整数常量的语法读取文本。之后的任何内容都会留在输入流中。
如果没有看到更多的代码和您提供的输入,很难说出问题所在。
使用scanf
可能会非常棘手。更好的方法是使用fgets()
读取整行输入,然后sscanf()
来解释其内容。通过使用fgets()
,您不会让部分输入行等待下一次调用(除非行长于输入缓冲区),如果sscanf()
调用失败,则不会影响输入流的状态。
注意,请使用fgets()
,不 gets()
; gets()
本质上是不安全的,永远不应该使用,并且已从语言标准中删除。