gpt4 book ai didi

c - 程序没有做它应该做的事 - C

转载 作者:太空宇宙 更新时间:2023-11-04 01:40:56 24 4
gpt4 key购买 nike

我编写了一个程序,它从用户那里接收一系列数字 (<=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++;
}

return 0;
}

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++;
}
}

}

出于某种未知原因,对于任何类型的合法输入,我都会收到“数字顺序不正确...”错误消息...

如果有人能修复它,我会非常高兴,所以它应该可以正常工作,因为直到现在我可以看到一切似乎都很好......

谢谢 :( ...

最佳答案

getchar() 并不像您认为的那样。阅读它的描述 ( http://pubs.opengroup.org/onlinepubs/9699919799/functions/getchar.html )。

您可以尝试使用 scanf()(http://pubs.opengroup.org/onlinepubs/9699919799/functions/scanf.html),或者更好的方法是 fgets()sscanf()

关于c - 程序没有做它应该做的事 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5664480/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com