选调2时,需要输入两次,结果中多出了一行0+


#include<stdio.h>
#include<stdlib.h>

int gn1(int m,int n);
int gn2(int n);
int gn3();

int main()
{
 int t;
  
 while(1){
  printf("功能菜单·功能选调\n");
  printf("1.功能(1)免费旅行\n");
  printf("2.功能(2)回文数的形成\n");
  printf("3.功能(3)奇异的三位数\n");
  printf("0.退出程序\n");
  printf("请输入选项序号:") ;
  
  scanf("%d",&t) ;
  
  if(t==0)break;
  
  switch(t){
   case 1:{
    int m, n;
     printf("请输入游客个数m和报数值n(请使用空格分隔): ");
     scanf("%d%d", &m,&n);
     printf("获得免费旅行服务的游客编号为:%d\n ",gn1(m,n));
        break;
    }
    case 2:{
        int n;
        printf("请输入一个整数:");
scanf("%d", &n);
if (n <= 0) {
printf("输入有误!\n");
break;
}
printf("\n形成过程:\n");
printf("%d + %d = %d\n", gn2(n));
        break;
    }
    case 3:{
        int n=gn3();
        printf("这个奇异的三位数是:%d\n",n);
        break;
    }
      default:
       printf("输入错误,请重新输入!\n");
       break;
  }
 }
 printf("程序已经退出!");
 return 0; 
}

int gn1(int m,int n){
    if(m==1){
  return 1;
 }
 else{
  return (gn1(m-1,n)+n-1)%m+1;
 }
}

int palindromic(int x)
{
    int i=0;
    while(x)
    {
        i=i*10+x%10;
        x=x/10;
    }
    return i;
}
int judge(int x)
{
    if(x==palindromic(x))
    {
        return 1;
    }
    else
    {
        return 0;
    }
}
int gn2(int n){
    int x2,key;
    scanf("%d",&n);
    if(!judge(x2))
    {
        printf("yes palindromic\n");
        return 0;
    }
    while(1)
    {    
        x2=palindromic(n);
        key=judge(x2);
        if(key==0)
        {
            n+=x2;
        }
        else
        {
            break;
        }
    }
    return 0;
}
gn3(int n,int a,int b,int c){
    for (n = 100; n <= 666; n++) {
        a = n / 49;
        b = (n % 49) / 7;
        c = n % 7;
        if (a == n % 9 && b == (n / 9) % 9 && c == n / 81){
            return n;
        }
    }
    return 0;
}

因为gn2已经传入一个n了,但你在函数里又输入一次


int gn2(int n){
    int x2,key;
    scanf("%d",&n);

至于输出问题,肯定是0+一列数字=一列数字吧
显然因为你一个gn2的int返回值,但前面有3个%d;没太看懂你这个代码在实现什么功能



printf("%d + %d = %d\n", gn2(n));

img

img

img

修改如下,功能2 回文数的形成里,要注意输入数值的范围,供参考:

#include<stdio.h>
#include<stdlib.h>

int gn1(int m, int n);
int gn2(int n);
int gn3();

int main()
{
    int t;
    while (1) {
        printf("功能菜单·功能选调\n");
        printf("1.功能(1)免费旅行\n");
        printf("2.功能(2)回文数的形成\n");
        printf("3.功能(3)奇异的三位数\n");
        printf("0.退出程序\n");
        printf("请输入选项序号:");

        scanf("%d", &t);

        if (t == 0)break;

        switch (t) {
        case 1: {
            int m, n;
            printf("请输入游客个数m和报数值n(请使用空格分隔): ");
            scanf("%d%d", &m, &n);
            printf("获得免费旅行服务的游客编号为:%d\n ", gn1(m, n));
            break;
        }
        case 2: {
            int n;
            printf("请输入一个整数:");
            scanf("%d", &n);
            if (n <= 0) {
                printf("输入有误!\n");
                break;
            }
            printf("\n形成过程:\n");
            gn2(n);
            //printf("%d + %d = %d\n", gn2(n));
            break;
        }
        case 3: {
            int n = gn3();
            printf("这个奇异的三位数是:%d\n", n);
            break;
        }
        default:
            printf("输入错误,请重新输入!\n");
            break;
        }
    }
    printf("程序已经退出!");
    return 0;
}

int gn1(int m, int n) {
    if (m == 1) //{
        return 1;
    //}
    //else {
    return (gn1(m - 1, n) + n - 1) % m + 1;
    //}
}

int palindromic(int x)
{
    int i = 0;
    while (x)
    {
        i = i * 10 + x % 10;
        x = x / 10;
    }
    return i;
}
int judge(int x)
{
    if (x == palindromic(x))
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

int gn2(int n) {
    int x2, key = 0;
    //scanf("%d", &n); // 修改  
    while (!judge(n))  //if (!judge(x2))  修改
    {
        x2 = palindromic(n);
        printf(key ++ ? " = %d + %d" : "%d + %d", n, x2);
        n += x2;
    }
    printf(key ? " = %d yes palindromic\n" : "%d yes palindromic\n ", n);
    return 0;
}

int gn3() {  //gn3(int n, int a, int b, int c)  修改 这个函数没有形参
    int  n, a, b, c;  // 修改
    for (n = 100; n <= 666; n++) {
        a = n / 49;
        b = (n % 49) / 7;
        c = n % 7;
        if (a == n % 9 && b == (n / 9) % 9 && c == n / 81) {
            return n;
        }
    }
    return 0;
}