注册 登录
编程论坛 C语言论坛

这个程序怎么就有问题啊!各位大佬帮帮我

谦忍鸣 发布于 2022-03-07 15:57, 2125 次点击
#include<stdio.h>
int main()
{
    void fun();
    char s[19];
    fun(s);
}
void fun(char *w)
{
    int i,x,y;
    for(i=1,y=0;i<=100;i++)
    {
      x=i;
      while(x>0)
      {
            *(w+y)=x%10;
            x/=10;
          y++;
      }
      *(w+y)='\0';
      for(x=0,y=y-1;x<y;x++,y--)
      if(*(w+x)==*(w+y))
      continue;
      else
      break;
      if(x>=y)
      printf("******%d\n",i);
    }
}
11 回复
#2
不会游泳的虾2022-03-07 17:12
void fun(char *); //void fun(); 函数声明形参没有
#3
谦忍鸣2022-03-07 17:14
回复 2楼 不会游泳的虾
这个不用声明也可以
#4
zhejin2022-03-07 17:48
fun函数应该在main函数之上
#5
谦忍鸣2022-03-07 23:26
回复 4楼 zhejin
不是函数定义这个问题,他提示的是栈溢出,我不理解为什么会栈溢出
#6
不会游泳的虾2022-03-08 08:29
回复 3楼 谦忍鸣
这样不带形参的声明,函数实现时又带了形参,编译过不去啊,把函数的实现搬到main()函数前面,这是可以的。另代码里是实现什么功能,栈溢出。修改如下,供参考:
程序代码:
#include<stdio.h>
int main()
{
    void fun(char *); //void fun(); 函数声明形参没有
    char s[19];
    fun(s);
    return 0;
}
void fun(char* w)
{
    int i, x, y;
    for (i = 1, y = 0; i <= 100; i++)
    {
        x = i; y = 0; //y 复位归零
        while (x > 0)
        {
            *(w + y) = x % 10;
            x /= 10;
            y++;
        }
        *(w + y) = '\0';
        for (x = 0, y = y - 1; x < y; x++, y--)
            if (*(w + x) == *(w + y))
                continue;
            else
                break;
        if (x >= y)
            printf("******%d\n", i);
    }
}


[此贴子已经被作者于2022-3-8 09:33编辑过]

#7
rjsp2022-03-08 12:56
这个程序怎么就有问题啊!各位大佬帮帮我
有什么问题应该你告诉大家,怎么解决才是别人告诉你。
你只贴段代码,别人都不知道要解决什么问题,只能瞎猜

#include <stdio.h>

int main( void )
{
    void fun(); // C语言中不写参数列表的话表示可以接受任意参数,相当于C++的void fun(...)
    fun();
}

void fun( void )
{
    for( int i=1; i<=100; ++i )
    {
        char s[19];
        int len = 0;
        for( int t=i; t!=0; t/=10 )
            s[len++] = t%10;

        int index;
        for( index=0; index!=len/2; ++index )
        {
            if( s[index] != s[len-1-index] )
                break;
        }

        if( index == len/2 )
            printf( "******%d\n", i );
    }
}


[此贴子已经被作者于2022-3-8 13:01编辑过]

#8
rjsp2022-03-08 13:03
写代码要规矩,不要故意给自己添麻烦。
比如,你代码中的 y 只需要在for中起作用,那么正常人就不会写到for之外去
#9
谦忍鸣2022-03-08 15:08
回复 6楼 不会游泳的虾
我把for循环的表达式1看成了每次循环都会执行的语句了,忘了他其实只有初始化,谢谢提醒
#10
谦忍鸣2022-03-08 15:23
回复 7楼 rjsp
实在不好意思,当时很心急不知道咋办了。下次一定注意!
大佬你的算法是在循环中定义变量,这样做是不是每次循环结束后之前定义的变量就释放了,达到重新赋值的效果是吧?
#11
谦忍鸣2022-03-08 15:29
回复 8楼 rjsp
好的,谢谢提醒,下次我会注意这些细节的
#12
wsswym04062022-03-10 16:04
while(x>0)
      {
            *(w+y)=x%10;
            x/=10;
          y++;
      }
这段程序是无线循环
1