以下是我的任务:
编写一个函数fact_calc
,它接受一个字符串输出参数和一个整数输入参数n
,并返回一个显示n!
计算的字符串。例如,如果为n
提供的值为6,则返回的字符串将为
“6! x 6 x 5 x 4 x 3 x 2 x 1 x = 720”
。编写一个程序,重复提示用户输入0到9之间的整数,调用fact_calc
并将结果字符串输出到一个正确大小的星号框中以包围结果。如果用户输入无效值,程序应显示错误消息并重新输入有效输入。输入Sentinel -1应该导致输入循环退出。
这是我的代码:
#include <stdio.h>
/*Prototypes*/
void fact_calc(char [], int);
int main(void)
{
char calc[99];
int num1;
do{
printf("Enter an integer between 0 and 9 or -1 to quit: ");
scanf("%d", &num1);
fact_calc(calc, num1);
}while( num1 != -1 );
return (0);
} //end main
/*Place function definitions below*/
void fact_calc(char calc[], int num1)
{
if(num1 == 0)
char calc[] = "0! = 0 = 0";
else if(num1 == 1)
char calc[] = "1! = 1 = 0"
else if(num1 == 2)
char calc[99] = "2! = 2 x 1 = 2"
else if(num1 == 3)
char calc[99] = "3! = 3 x 2 x 1 = 6"
else if(num1 == 4)
char calc[99] = "4! = 4 x 3 x 2 x 1 = 24"
else if(num1 == 5)
char calc[99] = "5! = 5 x 4 x 3 x 2 x 1 = 120"
else if(num1 == 6)
char calc[99] = "6! = 6 x 5 x 4 x 3 x 2 x 1 = 720"
else if(num1 == 7)
char calc[99] = "7! = 7 x 6 x 5 x 4 x 3 x 2 x 1 = 5040"
else if(num1 == 8)
char calc[99] = "8! = 8 x 7 x 6 x 5 x 4 x 3 x 2 x 1 = 40320"
else if(num1 == 9)
char calc[99] = "9! = 9 x 8 x 7 x 6 x 5 x 4 x 3 x 2 x 1 = 362880"
else
printf("Invalid Entry");
}
我收到错误:
expected
expression
ch...
^
我仍然需要打印出字符串,但我无法弄清楚错误的含义或我做错了什么。在此先感谢您的帮助!
答案 0 :(得分:2)
char calc[] = "1! = 1 = 0"
你认为你应该用;
char calc[] = "1! = 1 = 0";
需要对其余行进行类似的修复
答案 1 :(得分:0)
您不能在C中分配字符串(字符数组)。您应该使用strcpy()
代替。
E.g。
strcpy(calc, "2! = 2 x 1 = 2");
请注意,只有当您100%确定strcpy()
足够大以存储整个字符串时,才应使用calc
。如果没有,请改用strncpy()
。例如:
strncpy(calc, "2! = 2 x 1 = 2", 99);
calc[98] = '\0';
// a better way would be to pass 99 to your function, or to declare a macro
最后,注意两者都是0!和1!应为1,而不是0。
答案 2 :(得分:0)
你的程序正在做一些奇怪的事情。我怀疑它符合你的期望。
您在if
语句的正文中声明了变量。这些变量只在身体的范围内,你不能对它们做任何事情。
您的程序可以正常运行。我建议只需让fact_calc()
返回文字字符串,而不是尝试分配给变量。
/*Place function definitions below*/
char const *fact_calc(char calc[], int num1)
{
if(num1 == 0)
return "0! = 0 = 0";
else if(num1 == 1)
return "1! = 1 = 0";
else if(num1 == 2)
return "2! = 2 x 1 = 2";
else if(num1 == 3)
return "3! = 3 x 2 x 1 = 6";
else if(num1 == 4)
return "4! = 4 x 3 x 2 x 1 = 24";
else if(num1 == 5)
return "5! = 5 x 4 x 3 x 2 x 1 = 120";
else if(num1 == 6)
return "6! = 6 x 5 x 4 x 3 x 2 x 1 = 720";
else if(num1 == 7)
return "7! = 7 x 6 x 5 x 4 x 3 x 2 x 1 = 5040";
else if(num1 == 8)
return "8! = 8 x 7 x 6 x 5 x 4 x 3 x 2 x 1 = 40320";
else if(num1 == 9)
return "9! = 9 x 8 x 7 x 6 x 5 x 4 x 3 x 2 x 1 = 362880";
/* Invalid Entry */
return NULL;
}
然后你的main函数应该声明一个char const *
类型的变量来存储这个函数返回的指针,并且应该检查指针是不是设置为NULL
(并打印"Invalid Entry"
如果指针设置为NULL
)。