C语言的问题,怎么都编译不成功,求解答哪里出了问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言的问题,怎么都编译不成功,求解答哪里出了问题相关的知识,希望对你有一定的参考价值。

如题,代码作用是输入一个正整数,不超过5位。1.显示该数是几位数2.显示该数各位都是几3.将该数各位数打乱后以从大到小的顺序排列组成一个新的数再输出。
以下是我写的代码:
#include<stdio.h>
int main()

int num,a,b,c,d,e,weishu;
int newnum(int new1,int new2,int new3,int new4,int new5);
int fin=newnum(a,b,c,d,e);
scanf("%d",&num);
if(num>0&&num<=99999)

a=num/10000;
b=(num-a*10000)/1000;
c=(num-a*10000-b*1000)/100;
d=(num-a*10000-b*1000-c*100)/10;
e=num-a*10000-b*1000-c*100-d*10;

if(a!=0)

weishu=5;
if(b!=0)

weishu=4;
if(c!=0)

weishu=3;
if(d!=0)
weishu=2;
else weishu=1;



printf("1.weishu=%d\n2.a=%d,b=%d,c=%d,d=%d,e=%d\n3.newnum=%d",weishu,a,b,c,d,e,newnum);

else printf("You stye this number is wrong!!\n");
return 0;

int newnum(int new1,int new2,int new3,int new4,int new5)

int x,new;
for(int z=4;z>0;z--)

if (new1<=new2)
x=new2;
new2=new1;
new1=x;
if(new2<=new3)
x=new3;
new3=new2;
new2=x;
if(new3<=new4)
x=new4;
new4=new3;
new3=x;
if(new4<=new5)
x=new5;
new5=new4;
new4=x;

new=new1*10000+new2*1000+new3*100+new4*10+new5;
return (new);


编译后的错误提示:
$ g++ -o 20 20.c
20.c: In function 'int newnum(int, int, int, int, int)':
20.c:38: error: expected unqualified-id before 'new'
20.c:58: error: expected type-specifier before '=' token
20.c:58: error: lvalue required as left operand of assignment
20.c:59: error: expected type-specifier before ')' token
20.c:59: error: invalid conversion from 'int*' to 'int'

我没用指针,只用了循环和条件选择,望各位大神指点,究竟错在哪儿了?

g++是编译c++的命令,而c++里面new是关键字。因此2中解决方法:1、改用gcc编译;2、把new换成其他名字追问

我试了一下,的确是换个名字就好使了,能编译了。但是执行出来的结果明显不对,比如说:
输入:12345
1.weishu=2
2.a=1,b=2,c=3,d=4,e=5
3.newnum=4199228
谢谢在帮忙看看,如果能把这个解决我会再加分

追答

你这个程序写的一点通用性都没有,再帮你写一个
#include

int main()

int num,a,b,c,d,e,weishu;
int nenum(int ne1,int ne2,int ne3,int ne4,int ne5);

scanf("%d",&num);
if(num>0&&num0;z--)

if (new1
#define DIGIT_MAX 5

int digit_num;
int each_digit[DIGIT_MAX];
int new_num;

void sort(int * a, int n)

int i, j, tmp;

for (i = 0; i a[j + 1])

tmp = a[j];
a[j] = a[j + 1];
a[j + 1] = tmp;



void inf_set(int a)

digit_num = 0;

while (a)

each_digit[digit_num++] = a % 10;
a /= 10;



void print()

int i;

printf("1. digit number is %d\n", digit_num);
printf("2. each digit is: ");
for (i = digit_num - 1; i >= 0; i--)
printf("%d ", each_digit[i]);
sort(each_digit, digit_num);
printf("\n3. new number is: ");
for (i = digit_num - 1; i >= 0; i--)
printf("%d", each_digit[i]);
printf("\n");


int main()

int a;

scanf("%d", &a);
inf_set(a);
print();

return 0;

追问

大概能看明白,void sort是比较大小并排序,void inf_set是列出5个数并显示位数,void print()
是输出,int main()是输入。问题小弟是初学者,现在还没学到指针,所以能不能有个不用指针的方法啊?书上的习题,还没到指针就出了这么道题所以应该不用指针也能写出来。不用费那么大劲儿吧所有代码都给我写出来,就是给我指出哪里错了或者给点儿思路就行,谢谢啦!!

追答

我也没用指针哪,void sort(int * a, int n)里的int *a你把它看成是数组就完了,改成void sort(int a[], int n)也行,知道是把数组传进去就行了,另外,如果数组也没学过的话就当我没说……

参考技术A int newnum(int new1,int new2,int new3,int new4,int new5);
前面不需要这句 lz
参考技术B int x,new; new是关键字,不能作变量名

以上是关于C语言的问题,怎么都编译不成功,求解答哪里出了问题的主要内容,如果未能解决你的问题,请参考以下文章

将一个正整数分解质因数。python3.6问题,输出为空,是哪里出了问题,求大神解答

ASP.NET编译成功后,为啥有些功能不会执行?麻烦高手解答!

C语言 克鲁斯卡尔算法怎么判断是不是构造成回路?求大手解答

同一段代码,扩展名为cpp就可以成功编译,扩展为c就不能编译,求解答

关于用C语言求一个小数求小数点后面的位数多少的问题,求大神解答。

C语言标识符的存储问题