for循环工作,直到我添加printf(在C中)

sup*_*dso 1 c for-loop

我希望这段代码能够打印一个数字因子,如果它不是素数,并且如果它是素数则识别数字.

#include <stdio.h>

main() {
int possible_prime, n, possible_divisor;

printf( "\tThis program lists all primes <= n\n\n" );
printf( "Input n: " );
scanf( "%d", &n );
printf( "\n\n\tPrimes <= %d: \n\n", n );

    for ( possible_prime = 1; possible_prime <= n; possible_prime++ ) {
          /* try to find a divisor of possible_prime */

         for ( possible_divisor = 1; possible_divisor < possible_prime; possible_divisor++ ) {
             if ( possible_prime % possible_divisor == 0 )
                printf("\n\t%d", possible_prime);
               }

          /* found a divisor so possible_prime is not prime */
          break;

    if ( possible_divisor == possible_prime )
         /* exhausted possible divisors, so possible_prime is prime */
         printf( "%d\n", possible_prime );

   }
}
Run Code Online (Sandbox Code Playgroud)

它没有在if语句下面的printf工作正常.当我添加它时,程序只打印"素数<= n"而没有别的.我不明白为什么printf会弄乱循环?

dan*_*ben 6

你的break陈述是在错误的地方.把它放在内环里面for; 现在它for在检查1是否为素数后突破外部循环.

至于为什么只有在你添加了内部print语句之后才会发生这种情况,我猜你最终会在这个过程中移动一些花括号.

修好后你可能会发现你的程序告诉你没有什么是素数.您可能想要重新检查程序的素数条件.