我们的任务是制作一个程序,只接受用户的十个输入,然后将其分类为偶数或奇数数组。
这是我制作的节目:
#include<stdio.h>
int main(){
int even[10];
int odd[10];
int number;
int numOdd = 0;
int numEven = 0;
int sizeOdd = 0;
int sizeEven = 0;
int count;
printf("Input numbers:\n");
for(count = 0; count < 10; count++){
scanf("%d", &number);
if (number %2 == 0){
while (numEven < 10){
even[numEven++] = number;
sizeEven++;
}
}
else {
while (numOdd < 10){
odd[numOdd++] = number;
sizeOdd++;
}
}
}
printf("\n\nEven numbers(%d): ", sizeEven);
for(number = 0; number < numEven; number++){
printf("%d, ", even[number]);
}
printf("\n\nOdd numbers(%d): ", sizeOdd);
for(number = 0; number < numOdd; number++){
printf("%d, ", odd[number]);
}
system("pause");
return 0;
}
但我的程序只输出数组中的第一个数字并重复它。就像,如果我输入1,2,3,4,5,6,7,8,9,10,我得到:
偶数(10):2,2,2,2,2 奇数(10):1,1,1,1,1
我对程序中的一切/我的逻辑错了吗?我是在正确的轨道上,我只需要调整一下吗?希望得到帮助!
答案 0 :(得分:1)
这可能对您有所帮助: 为什么在if和else条件中添加while循环:
if (number %2 == 0){
even[numEven++] = number;
同样even[numEven++]
本身会增加numEven变量的值,不需要在下一行再次递增。
答案 1 :(得分:0)
您已使用while
两次,您应该使用if
。因此,您的even
数组将填入输入的第一个偶数,并且您的odd
数组将填充第一个奇数。
将每个while
更改为if
,您可能没问题,但我没有检查其他错误。例如......
if (number %2 == 0){
if (numEven < 10){
even[numEven++] = number;
sizeEven++;
}
}
while
关键字定义了它自己的完整循环 - 它不是对其他类型重复的限制,例如(在这种情况下)你向每个数组添加元素。
BTW - 你真的不需要if
检查。您只输入10个项目,因此最多可以向even
数组添加10个项目,或向odd
数组添加10个项目。由于数组足够大以容纳10个项目,因此您不需要在此代码中进行边界检查。
答案 2 :(得分:0)
while关键字定义了它自己的完整循环 - 它不是对其他类型重复的限制,例如(在这种情况下)你向每个数组添加元素。
顺便说一下 - 你真的不需要if检查。您只输入10个项目,因此最多可以添加