user-0 提问: 来个大神解惑下这个6174问题怎么有误？

回复:
user: user-0
content: 小白第一次来发帖，受教了。。

user: user-1
content: #include<stdio.h> //#include <unistd.h>  typedef void (*pfunc)(int *, int *);  static void swap(int *a, int *b) {     int tmp;         tmp = *a;         *a  = *b;         *b  = tmp; }  void asc_sort(int *a, int *b) {    if (*a > *b)        swap(a, b); }  void des_sort(int *a, int *b) {    if (*a < *b)        swap(a, b); }  void bubble_sort(int *arr, int size, pfunc sort) {     int i, j;      for (i = 0; i < size; i++)         for (j = 0; j < size - i - 1; j++)             sort(&arr[j], &arr[j+1]); }  int get_val(int *arr, int size) {     int i, val = 0;     for (i = 0; i < size; i++) {         val = val * 10;         val += arr[i];     }      return val; }  void get_arr(int *arr, int size, int key) {     int n = key, i;      for (i = 0; i < size; i++) {         arr[i] = n % 10;         n /= 10;     } }  int check_digit(int *arr, int size, int n) {     get_arr(arr, size, n);     bubble_sort(arr, size, des_sort);     if (arr[0] == arr[1]         || arr[1] == arr[2] || arr[2] == arr[3])         return 0;     return 1; }  int main(void) {     int n, arr[4], n1, n2;      while (scanf("%d", &n)) {         if (n < 1000 || n > 9999) {             printf("Input error, please continue!\n");             continue;         }         if (check_digit(arr, 4, n))             break;         else             printf("Input error, please continue!\n");     }      do {         get_arr(arr, 4, n);         bubble_sort(arr, 4, des_sort);         n1 = get_val(arr, 4);         bubble_sort(arr, 4, asc_sort);         n2 = get_val(arr, 4);         n = n1 - n2;         printf("4%d - %4d = %4d\n", n1, n2, n);     } while (n != 6174);       return 0; }  我的自定义函数比较多，并且用到了函数指针。冒泡排序等

user: user-1
content: #include<stdio.h> #include <unistd.h> #if 0 int main(int argc, const char *argv[]) {     int a[4] = {0};     int i,j,k,max,min,n,temp1,temp2;     printf("please input a four number\n");     scanf("%d",&n);     do     {         for(i=0;i<4;i++)         {             a[i]=n%10;             n/=10;         }         for(j=0;j<4;j++)         {             if(a[j]<a[j+1])             {                 temp1=a[j];                 a[j]=a[j+1];                 a[j+1]=temp1;             }         }         max=a[0]*1000+a[1]*100+a[2]*10+a[3];         for(k=0;k<4;k++)         {             if(a[k]>a[k+1])             {                 temp2=a[k];                 a[k]=a[k+1];                 a[k+1]=temp2;             }         }         min=a[3]*1000+a[2]*100+a[1]*10+a[0];         n=max-min;         printf("%d-%d=%d",max,min,n);     }while(n!=6174&&n!=0);     return 0; } #endif typedef void (*pfunc)(int *, int *);  static void swap(int *a, int *b) {     int tmp;         tmp = *a;         *a  = *b;         *b  = tmp; }  void asc_sort(int *a, int *b) {    if (*a > *b)        swap(a, b); }  void des_sort(int *a, int *b) {    if (*a < *b)        swap(a, b); }  void bubble_sort(int *arr, int size, pfunc sort) {     int i, j;      for (i = 0; i < size; i++)         for (j = 0; j < size - i - 1; j++)             sort(&arr[j], &arr[j+1]); }  int get_val(int *arr, int size) {     int i, val = 0;     for (i = 0; i < size; i++) {         val = val * 10;         val += arr[i];     }      return val; }  void get_arr(int *arr, int size, int key) {     int n = key, i;      for (i = 0; i < size; i++) {         arr[i] = n % 10;         n /= 10;     } }  int check_digit(int *arr, int size, int n) {     get_arr(arr, size, n);     bubble_sort(arr, size, des_sort);     if (arr[0] == arr[1]         || arr[1] == arr[2] || arr[2] == arr[3])         return 0;     return 1; }  int main(void) {     int n, arr[4], n1, n2;      while (scanf("%d", &n)) {         if (n < 1000 || n > 9999) {             printf("Input error, please continue!\n");             continue;         }         if (check_digit(arr, 4, n))             break;         else             printf("Input error, please continue!\n");     }      do {         get_arr(arr, 4, n);         bubble_sort(arr, 4, des_sort);         n1 = get_val(arr, 4);         bubble_sort(arr, 4, asc_sort);         n2 = get_val(arr, 4);         n = n1 - n2;         printf("%d - %d = %d\n", n1, n2, n);         sleep(1);     } while (n != 6174);       return 0; } 参考一下～

user: user-2
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。