拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 我在for回圈中宣告了一个i变量。但我无法在for回圈之外打印它。所以i就像for回圈中的区域变量?

我在for回圈中宣告了一个i变量。但我无法在for回圈之外打印它。所以i就像for回圈中的区域变量?

白鹭 - 2022-03-07 2097 0 0
#include<stdio.h>

void alldivisor(int n){

    for (int i=1; i*i<n; i  ) {
       if (n%i==0) {
            printf("%d ",i);
       }
    }
          printf("\n%d",i);
}


int main(){
    int n;
    
    printf("Enter a num: ");
   
    scanf("%d",&n);
   
    alldivisor(n);
}

uj5u.com热心网友回复:

您必须i在函式范围内定义变量alldivisor()

#include<stdio.h>

void alldivisor(int n)
{
    /* The variable "i" must be defined in the global scope of the "alldivisor()"*/
    int i;
    
    for(i = 1 ; i * i < n; i  )
    {
       if(n % i == 0)
       {
            printf("%d ",i);
       }
    }
    printf("\nResult: %d",i);
}

int main()
{ 
    int n;
    printf("Enter a num: ");
    scanf("%d",&n);
    alldivisor(n); 
    return 0;
}

uj5u.com热心网友回复:

for 回圈

uj5u.com热心网友回复:

是的,i是回圈内的区域变量。

尝试:

#include <stdio.h>

void alldivisor(int n){
    int i = 1;
    for (; i*i<n; i  ) {
       if ((n % i) == 0) {
            printf("%d ",i);
       }
    }
    printf("\n%d",i);
}


int main(){
    int n;
    
    printf("Enter a num: ");
   
    scanf("%d",&n);
   
    alldivisor(n);
}

在 C 语言中一个清晰的理解应该是在花括号内宣告的任何变量都在大括号{}的范围内。离开作用域后使用存储器地址技巧以某种方式访问??它是UNDEFINED BEHAVIOR

例如,这些技巧是未定义的,所以永远不要尝试它们:

...
int *ptr = NULL;
{
  int a = 1;
  ptr = &a;
}
/* Accessing address of 'a' is undefined behaviour */
printf("%d\n", *ptr);
...

因此,您必须i在函式范围内定义变量alldivisor()

此外,您可能会看到以下内容:

...
for (int i = 0; i < x; i  )
    /* one operation */
...

当您只需要在回圈中每次执行一个操作时,它是一种简写。即使缺少花括号,它也会创建一个新范围。

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *