#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 回圈:
for ( init 子句 ; cond 運算式 ; 迭代運算式 ) 回圈陳述句
與所有其他選擇和迭代陳述句一樣,for 陳述句建立塊范圍:在 init 子句、cond 運算式或迭代運算式中引入的任何識別符號在回圈陳述句之后超出范圍。
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 */
...
當您只需要在回圈中每次執行一個操作時,它是一種簡寫。即使缺少花括號,它也會創建一個新范圍。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/415256.html
標籤:
