#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 评论