所以,我必须创建一个程序来执行此操作:输入任意数量的0-100,可以在需要时停止输入数字,打印出所有输入的数字。到目前为止,我已经完成了这一部分。现在我必须添加最高,最低。和平均功能。我添加了一个部分来显示输入的最高数字,并且直到“数组中的元素”变为两位数,然后它返回不正确的结果。在我弄清楚这一部分之前,我不想再进一步了。有什么帮助吗?
#include <stdio.h>
int main()
{
int array[100], maximum, size, c;
char continueResponse;
int entryCount = 0;
printf("Enter the number of elements in array\n");
scanf("%d", &size);
for(c = 0; c < size; c++) {
printf("Enter a number between 0 and 100: ");
scanf("%d", &array[c]);
printf("Continue? (y/n): ");
scanf(" %c", &continueResponse);
entryCount++;
if(continueResponse == 'n' || continueResponse == 'N') {
printf(" == End of Data Entry ==\n\n");
break;
}
}
for(c = 0; c < entryCount; c++) {
printf ("You entered : %d\n", array[c]);
}
maximum = array[0];
for (c = 1; c < size; c++)
{
if (array[c] > maximum)
{
maximum = array[c];
}
}
printf("Largest number is %d.\n", maximum);
return 0;
}
答案 0 :(得分:1)
你有两个变量持有不同的信息。 size
是用户说他想要输入多少个数字,但事实上他可能输入的数量更少。输入的实际数字是entryCount
。因此,当您计算最大值时,您应该只到entryCount
。数组中的其他索引可能存在垃圾。
答案 1 :(得分:0)
我注意到一件事 - 寻找最大值的循环受size
而不是entrycount
的限制。您将在搜索中包含未初始化的数据。
我不确定这会解释为什么当你达到两位数时它会失败。
答案 2 :(得分:0)
你没有准确说出当你进入两位数时会发生什么。你确定它是“两位数”,这是你问题的根源。
但是正如已经指出的那样,你需要使用entryCount来控制循环,因为添加的条目数可能小于为size输入的值。
这似乎适用于单数和双数的条目数
maximum = array[0];
minimum = array[0];
for (c = 1; c < entryCount; c++) {
if (array[c] > maximum) maximum = array[c];
if (array[c] < minimum) minimum = array[c];
}
printf("Largest number is %d\n", maximum);
printf("Smallest number is %d\n", minimum);
return 0;
}
您可能希望查看用户数据输入的fgets。它不会为您进行转换,但如果用户输入意外数据,则scanf可能很难 - 当您应该输入另一个数字时尝试输入'y'。