为什么C中的for循环只能通过一次? [英] Why for loop in C only passes once?

查看:172
本文介绍了为什么C中的for循环只能通过一次?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一段非常简单的代码,用于检查给定的数字是否为排列

I have a really simple piece of code that checks if a number given is a permutation

(数字位数< 8;每个数字仅显示一次)

(number of digits < 8; each digits shows up only once)

出于未知原因,带有标记注释(HERE)的循环仅通过一次.有人可以帮我吗?

From unknown reasons to me for loop with marked comment ( HERE ) passes only once. Can anybody help me on that ?

#include <stdio.h>
#include <stdbool.h>

int num_digits(int number)
{
    int digits = 0;
    while (number) {
        number /= 10;
        digits++;
    }
    return digits;
}

int get_n_digit(int number, int which)
{
  if(which > num_digits(number))
  {
    printf("This number %d does not have that many digits: %d\n",number, which);
    return -1;
  }

  int to_return = number;
  int i = 0;
  for(i = 0; i < num_digits(number) - which;i++)
  {
    int digit = number % 10;
     to_return /= 10;
  }
  printf("get_n_digit(%d,%d)=%d\n",number,which, to_return %10);
  return to_return % 10;
}

bool permutation_check(int number)
{
  bool to_return = true;
  if(num_digits(number) > 8)
  {
    printf("Your number has more than 8 digits\n");
    return false;
  }
  int temp[10];
  int i;
  for( i = 0; i < 10; i++)
  {
    temp[i]=0;
  }

  printf(" for( i = 0; i < num_digits(%d) =  %d; i++)\n",number, num_digits(number));
  for( i = 0; i < num_digits(number); i++);
  {
    //HERE
    printf("temp[get_n_digit(%d,%d)]++;\n",number,i);
    temp[get_n_digit(number,i)]++;
    if( temp[get_n_digit(number,i)] > 1)
    {
      to_return = false;
    }
  }

  for( i = 0; i < 10; i++)
  {
    printf("%d\n",temp[i]);
  }
  return to_return;
}

int main(void)
{
  char line[256];
  int i, a;
  printf("Put a number to be checked for permutation condition.\n");
  if (fgets(line, sizeof(line), stdin)) {
      if (1 == sscanf(line, "%d", &i)) {
        printf("This many digits in this number: %d\n", num_digits(i));
        if(num_digits(i)<8)
        {
          if(permutation_check(i))
            printf("This number is a permutation.\n");
          else
            printf("This number is NOT a permutation.\n");
        }
   }
  }
  return 0;
}

推荐答案

您的for语句结尾处有分号

You have a semicolon at the end of your for statement

for( i = 0; i < num_digits(number); i++); // <-- Semicolon

这篇关于为什么C中的for循环只能通过一次?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆