编译错误

时间:2014-12-29 19:26:49

标签: c compiler-errors

以下是我的任务:

编写一个函数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...
  ^

我仍然需要打印出字符串,但我无法弄清楚错误的含义或我做错了什么。在此先感谢您的帮助!

3 个答案:

答案 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)。