gpt4 book ai didi

c - printf() 的意外行为

转载 作者:太空宇宙 更新时间:2023-11-04 01:23:55 25 4
gpt4 key购买 nike

我尝试在 C 中使用函数进行练习,因为我设法在 C++ 中使用递归函数,所以这是我的代码:

#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;
}

奇怪的是输出如下:

Factorial to calculate : 5
The factorial of 5
is equal to : 120

我使用 GCC 5.3.0 编译,命令如下:

gcc -o main main.c && ./main

我什至没有在 %s 和我的其余代码之间输入\n。我的第二个 printf() 有什么问题?我尝试使用 %c 而不是 %s,尽管这是个坏主意,但确实...

最佳答案

摘自 man fgets 在我的电脑上:

fgets() reads in at most one less than size characters from stream and stores them into the buffer pointed to by s. Reading stops after an EOF or a newline. If a newline is read, it is stored into the buffer. A terminating null byte ('\0') is stored after the last character in the buffer.

就是这样。您必须检查换行符并自行删除它,最好将其替换为 ASCII NUL(0 或“\0”)。

关于c - printf() 的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35164427/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com