我正在尝试创建一个函数来计算帕斯卡三角形的行并创建一个字符串来保存它。一切正常,直到列包含 2 位数字。然后,第二个数字被截断。
但是,当我单独使用 sprintf 函数时,没有 for 循环或 if else 语句,数字被正确保存。
char* pascal( int* n ) {
int r = *n;
int t = 0;
int i;
char res[MAX];
for ( t = *n, i = 0; t >= 0; t--, i++ ) {
if ( t == *n || t == 0 ) {
sprintf(&res[i], "%d", 1);
} else {
sprintf(&res[i], "%d", fact(r)/(fact(t) * fact((r - t)));
}
}
char* output = res;
return output;
}
当我在函数中输入 5 时,我得到: 151151
我的期望: 15101051
每个 pascal 行都是一样的,它的列包含 2 位或更多位的数字。
最佳答案
sprintf
返回“输出”的字符数。在 i++
中将返回值添加到 i
而不是:
i += sprintf(&res[i], "%d", ...);
关于c - 使用for循环在字符数组中保存数字时数字被截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58421671/