这是我前段时间分配的一个家庭作业项目......我已经成功地独自完成了这一步,而我剩下的唯一问题是(我相信)数据类型和溢出问题。
我尝试切换到无符号和双精度,并且代码符合并仍然接受终端中的输入,但之后似乎挂断了......没有打印任何内容,看起来它陷入了循环。
这是代码...
/* pascaltri.c
* A program that takes a single integer as input and returns the nth line of
* Pascal's Triangle. Uses factorial() function to help find items of
* individual entries on a given row.
*/
#include <stdio.h>
#include <stdlib.h>
long factorial(long i)
{
long fact = 1;
while(i > 1)
{
fact = fact * i;
i = i - 1;
}
return fact;
}
main(void)
{
long n;
long *nPtr;
nPtr = &n;
scanf(" %i", nPtr);
if (n >= 0)
{
long k;
long *kPtr;
kPtr = &k;
for(k = 0; k <= n; k++)
{
long ans;
long *ansPtr;
ansPtr = &ans;
ans = factorial(n) / (factorial(k) * factorial(n - k));
printf("\n %i", ans);
}
return 0;
}
return 0;
}
它既不完美也不漂亮,但它最多可以输入三角形的 13(即第 14 行)。除此之外,我开始在返回中出现乱码,甚至是负值……更大的值会破坏代码并且只返回退出错误消息。
关于如何纠正这个问题的任何想法?我一直盯着屏幕很长时间才能真正看到自己的任何东西。此外,这不是必需的,但我想在一行上打印我的返回值,而不是用换行符分隔它们。
1 5 10 10 5 1
最简单的方法是在计算值时将值加载到数组中,然后打印数组吗?或者有没有一种内置的方法可以告诉打印语句只出现在一行上?