我尝试在C中使用函数进行练习,因为我设法在C ++中使用递归函数,所以这里是我的代码:
a
奇怪的是输出如下:
#include <stdio.h>
#include <stdlib.h>
int Fctr(int n)
{
return (n <= 1) ? 1 : n * Fctr(n -1);
}
int main(int argc, char** argv)
{
char s_n[100];
int i_n;
printf("Factorial to calculate : ");
fgets(s_n, 100, stdin);
i_n = atoi(s_n);
printf("The factorial of %s is equal to %d\n",s_n, Fctr(i_n));
return 0;
}
我使用GCC 5.3.0使用以下命令编译:
Factorial to calculate : 5
The factorial of 5
is equal to : 120
我甚至没有在%s和我的其余代码之间键入\ n。我的第二个printf()有什么问题?我尝试使用%c代替%s,即使这是一个坏主意,确实是......
答案 0 :(得分:4)
摘自我电脑上的ant -Dadb.device.arg='-s emulator-5554' installd
:
fgets()从流和中读取最多一个小于大小的字符 将它们存储到s指向的缓冲区中。读后停止了 EOF或换行符。 如果读取换行符,则将其存储到缓冲区。 终止空字节('\ 0')存储在最后一个字符之后 缓冲区。
这就是发生的事情。您必须自行检查换行并将其删除,最好用ASCII NUL(0或'\ 0')替换它。