我编写了一个程序,它从用户那里接收一系列数字(< = 20),而最后一个'0'表示系列结束(不包括在系列存储中)。 2个数组(x,y)的大小为20(0-19 + 1为'0')必须为零,m为Y数组中的器官数。
用户必须输入数字升序(确定4ex.1,2,2,3,7,8,...,0)并以“0”结束,如果没有,相应的错误信息将出现,程序将关闭。
我们可以确定用户将保留< = 20个输入数字。
Y数组(如果X数组一切正常)将是一个排序的X数组但没有重复。 'm'将是Y中的器官数量,当然不包括'0'。
功能SIFT必须只组织Y数组以便从main()打印。
示例:
如果用户将存储在X:1,1,2,3,5,5,5,6
中屏幕上将是:m = 5 Y = 1,2,3,5,6
我的试用:
#include <stdio.h>
#include <string.h>
void SIFT(int x_arr[ ], int y_arr[]);
int main ()
{
int x[20] = {0} , y[20] = {0};
int m=0,temp=0,curr=0,i=0,j=0;
printf("Please enter your numbers now:\n\n");
/*enter numbers one by one. if x[i+1] value < x[i] value, err msg.
when user want to end the series he must enter '0' which means end of string (it wont included in x[]) */
while ( ( temp = getchar() ) != '0' )
{
if (temp >= curr)
{
x[i] = temp;
curr = temp;
i++;
}
else
{
printf("The numbers are not at the right order !\n\nProgram will now terminate...\n\n");
}
}
SIFT(x,y);
for (i=0 ; y[i]=='0' ; i++) /*strlen(y) without ('0')'s includes*/
m++;
/*Prints m , y's organs*/
printf("\n\nm = %d",m);
printf("Y = ");
while (y[j]!='0')
{
printf ("%d ,",y[j]);
j++;
}
void SIFT(int x_arr[ ], int y_arr[])
{
int i=0,j=0;
while (x_arr[i] != '0')
{
if (x_arr[i] == x_arr[i+1]) /*if current val. equals next val. -> jump dbl at x_arr*/
{
y_arr[j] = x_arr[i];
i+=2;
j++;
}
else
{
y_arr[j]=x_arr[i];
i++;
j++;
}
}
}
return 0;
}
我从gcc获得的错误是:
gcc -g -ansi -pedantic -Wall 2.c -o 2
2.c: In function ‘main’:
2.c:43: warning: ISO C forbids nested functions
2.c:43: warning: ISO C90 forbids mixed declarations and code
/tmp/ccyZNfkF.o: In function `main':
/home/student/Desktop/2/2.c:29: undefined reference to `SIFT'
collect2: ld returned 1 exit status
make: *** [2] Error 1
还有一个问题:
我想将此代码转换为MIPS汇编代码,有没有简短快捷的方法呢?
谢谢你们所有人!!
答案 0 :(得分:2)
您没有关闭SIFT声明之前的主要功能,因此SIFT在main内被声明为禁止。
通过在SIFT()
的定义之前从main返回来修复它:
...
return 0;
}
void SIFT(int x_arr[ ], int y_arr[])
{
int i=0,j=0;
...