Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C For循环在循环中初始化整数时表示表达式语法错误_C - Fatal编程技术网

C For循环在循环中初始化整数时表示表达式语法错误

C For循环在循环中初始化整数时表示表达式语法错误,c,C,编程时我遇到了一个不寻常的错误。当我在循环中初始化一个整数时,有时它会说表达式无效,但有时它会接受它。 这是我的代码,它给出了错误: int pow(int x,int n); int main() { int x,n,result; printf("Enter a number:\n"); scanf("%d",&x); printf("Enter its power:\n"); scanf("%d",&n); result=po

编程时我遇到了一个不寻常的错误。当我在循环中初始化一个整数时,有时它会说表达式无效,但有时它会接受它。 这是我的代码,它给出了错误:

int pow(int x,int n);
int main()
{
    int x,n,result;
    printf("Enter a number:\n");
    scanf("%d",&x);
    printf("Enter its power:\n");
    scanf("%d",&n);
    result=pow(x,n);
    printf("Result is %d\n",result);
    getch();
    return 0;
}
int pow(int x,int n)
{   
    for(int i=1;i<n;i++)   //<-- here it says that declaration syntax error
    x=x*i;
    return x;
}
intpow(intx,intn);
int main()
{
int x,n,结果;
printf(“输入一个数字:\n”);
scanf(“%d”和&x);
printf(“输入其功率:\n”);
scanf(“%d”和“&n”);
结果=功率(x,n);
printf(“结果为%d\n”,结果);
getch();
返回0;
}
整数功率(整数x,整数n)
{   

对于(int i=1;i c,c99之前),需要在循环之前声明变量。在C++中,现在在c99中,可以在尝试时在循环中声明它们。您得到的不同结果可能是因为有时编译为C++,有时编译为C.</P>
<>你可以尝试将你的代码编译成C++,或者如果你使用的是GCC或CLAN,用<代码> -STD= C99 < /Cord>标记> C99不被MSVC支持,所以你需要使用C++或者在使用MSVC时把这个声明移到循环之外。< /P> <你使用的是什么编译器?< /P>
C99之前的旧版本的C要求所有变量声明都在代码块的顶部进行。

听起来像是C89编译器(而不是C99编译器)

在C89中,只允许在函数的开头声明变量。不允许在函数的其他地方声明变量,包括在
for
语句的初始化部分。这就是为什么第二种语法有效而第一种语法失败的原因


第二个语法对于C99和C++是有效的,但对于C89不适用。

< P> C89,早期版本只支持块头上的声明语句(IOW,在打开的代码> {< /COD>和声明是另一个声明之间唯一出现的东西):

/*C89及更早版本*/
内部主(空)
{
int x;/*这是合法的*/
...
对于(x=0;x<10;x++)
{
int i;/*这也是*/
printf(“x=%d\n”,x);
int j=2*x;/*非法*/
}
int y;/*非法*/
...
}
有了C99,声明语句几乎可以出现在任何地方,包括控件表达式(注意在使用之前必须声明某些内容):

<代码> /c99及以后,C++ 内部主(空) { int x;//与前面相同 ... for(int i=0;i<10;i++)//自C99起受支持 { printf(“i=%d\n”,i); int j=2*i;//从C99起受支持 } int y;//从C99起受支持 }

Turbo C早于C99标准,因此,如果您想编写第二个示例中的代码,您需要使用更先进的编译器。

哪个版本的Turbo C?如果我记得印度大学的任何信息,那就是我们使用的Turbo C和borland C编译器比教授们要旧。很可能您面临的是同一个issBorland Turbo C的上一次发布是在1989年(二十一年前!)。这就解释了为什么它不支持创建十年后才开始使用的功能。出于许多原因,我强烈建议您使用一个更新的编译器。MinGW是一个基于gcc的优秀、免费、现代的windows C99编译器。Microsoft VC++Express Edition也是免费和现代的,但在使用C时只是一个C89编译器ode.@bluesmoon:是的,它是turbo c 3.0编译器(borland)turbo C 3.0甚至可能不兼容C89,但IIRC它比Borland实际参与或至少关注标准过程的同一时代的任何MS编译器都更接近。MS加入该团队花费了更长的时间……您能否在问题中添加一个代码片段,在
for
语句中声明变量,然后它有效吗?如果没有这一点来比较非工作版本,就无法告诉您区别是什么。您发布了一段代码,在
for
语句中声明了它,但它不起作用。然后您有另一段代码,在
for
语句之前声明了它,它确实起作用。原因是它们产生不同的结果是因为它们在不同的地方声明变量。其中一个在合法的地方声明变量,另一个在非法的地方声明变量。就像编程中的其他任何东西一样,它工作的时间就是你以正确、合法的方式编写它的时间。@fahad抱歉,我帮不了你Turbo C的细节,正如我所说的,如果你希望第一个例子工作,请确保你把它设置成C++或C99模式(可能是C++,我不认为Turbo C支持C99)。谢谢:我会找到明GW。
int pow(int x,int n)
{   
    int i;
    for(i=1;i<n;i++)  
    x=x*i;
    return x;
}
/* C89 and earlier */
int main(void)
{
  int x;                      /* this is legal */
  ...
  for (x = 0; x < 10; x++)
  {
    int i;                    /* so is this */
    printf("x = %d\n", x);
    int j = 2*x;              /* ILLEGAL */
  }
  int y;                      /* ILLEGAL */
  ...
}
// C99 and later, C++
int main(void)
{
  int x;                       // same as before
  ...
  for (int i = 0; i < 10; i++) // supported as of C99
  {
    printf("i = %d\n", i);
    int j = 2 * i;             // supported as of C99
  }
  int y;                       // supported as of C99
}