为什么我在 C 中的 main 函数只打印第一个 for 循环?

Why does my main function in C only prints the first for loop?

我试图为每种类型的数字打印它自己的行,但是当我 运行 代码不起作用时,我已经单独检查了每个函数并且每个函数都运行良好。

我从用户那里得到了两个数字,我的目标是打印出两个数字之间的每个数字,包括它们。

void main(void){
    int a, b;
    printf("\n Hello, how are you? Please enter the two numbers: \n");
    scanf("%d %d", &a,&b);
    
    printf("\n isPrime numbers: \n");
    for(a; a<=b; a++){
        if(isPrime(a) == 1){
            printf("%d, ", a);         
        } 
    } 
    
    printf("\n isStrong numbers: \n");
    for(a; a<=b; a++){
        if(isStrong(a) == 1){
            printf("%d, ", a);          
        } 
    } 
    
    printf("\n isPalindrome numbers: \n");
    for(a; a<=b; a++){
        if(isPalindrome(a) == 1){
            printf("%d, ", a);          
        } 
    } 
    
    printf("\n isArmostrong numbers: \n");
    for(a; a<=b; a++){
        if(isArmstrong(a) == 1){
            printf("%d, ", a);          
        } 
    } 
    
}

此代码仅打印出素数的第一个 for 循环。

 Hello, how are you? Please enter the two numbers: 
1 100

 isPrime numbers: 
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 
 isStrong numbers: 

 isPalindrome numbers: 

 isArmostrong numbers: 

在第一个 for 循环之后

for(a; a<=b; a++){

由于在循环中递增变量a,变量a变得大于变量b。因此,以下 for 循环中的条件计算结果为 false。

您可以在 for 循环中引入局部变量,例如

for( int i = a; i <= b; i++){
    if(isPrime(i) == 1){
        printf("%d, ", i);         
    } 
} 

注意根据C标准,不带参数的函数main应该声明为

int main( void )

您从未重置 a。所以在第一个for循环中,a会等于1,爬升到b。但是在下一个循环中,a 仍然等于 100。尝试将用户输入存储在一个单独的变量中,并且每次都重新设置 a

您可以将 a 存储到某个临时变量中,然后用它初始化每个 for 循环。

int a, b, tmp;

scanf("%d %d", &a,&b);

tmp=a;

然后你可以像这样初始化每个for循环

for(a=tmp; a<=b; a++){