C语言中的简单yes/no循环

C语言中的简单yes/no循环,c,loops,C,Loops,我是编程新手,我正在尝试做一个简单的C程序,用y/n循环填充一个数组,得到和/平均/条目数/最小值和最大值,但最后得到的都是零。任何提示都会很有帮助,下面是代码。提前谢谢 #include <stdio.h> int main() { int N, Number, i= 0,j=0, c; double sum, average, min, max; double array[N]; double arr[100];

我是编程新手,我正在尝试做一个简单的C程序,用y/n循环填充一个数组,得到和/平均/条目数/最小值和最大值,但最后得到的都是零。任何提示都会很有帮助,下面是代码。提前谢谢

#include <stdio.h>
int main() {
        int N, Number, i= 0,j=0, c;
        double sum, average, min, max;
        double array[N];
        double arr[100];
        char YesNo = 'y';
        int count = 0;
        printf("Please enter maximum size of the array: ");
        scanf("%d",&N);
        while(1){
                printf("Do you want to enter a number? ");
                scanf("%c",&YesNo);
                //if(YesNo != 'Y' || YesNo != 'y' || YesNo != 'n' || YesNo != 'N'){
                //printf("Please enter y or n ");
                //break;
                //return 0;}
                if(YesNo =='y' || YesNo == 'Y'){
                        printf("Enter number: ");
                        scanf("%f", &array[i]);
                        array[i]=arr[j];
                        i++;
                        count++;
                        j++;
                }
                if(YesNo =='n' || YesNo == 'N'){
                        break;
                }
        }
        max = arr[0];
        for (c = 1; c < count; c++) {
                if (arr[c] > max)
                {
                        max = arr[c];
                }
        }
        min = array[0];
        for (c = 1; c < count; c++)
        {
                if (array[c] < min)
                {
                        min = array[c];
                }

        }

        for (i=0; i<count; i++)
        {
                sum = sum + arr[i];
                average = sum/count;
                Number = count;
        }
        printf("\n Sum is: %f",sum);
        printf("\n Number of elements is: %d", count);
        printf("\n Average is: %f ", average);
        printf("\n Maximum is %f",max);
        printf("\n Minimum is %f",min);

        return 0;
}
#包括
int main(){
int N,数字,i=0,j=0,c;
双倍和、平均值、最小值、最大值;
双数组[N];
双arr[100];
char YesNo='y';
整数计数=0;
printf(“请输入数组的最大大小:”);
scanf(“%d”和“&N”);
而(1){
printf(“您想输入一个数字吗?”);
scanf(“%c”、&YesNo);
//如果(YesNo!=“Y”| YesNo!=“Y”| YesNo!=“n”| YesNo!=“n”){
//printf(“请输入y或n”);
//中断;
//返回0;}
如果(YesNo=='y'| | YesNo=='y'){
printf(“输入编号:”);
scanf(“%f”和数组[i]);
数组[i]=arr[j];
i++;
计数++;
j++;
}
if(YesNo=='n'| | YesNo=='n'){
打破
}
}
max=arr[0];
对于(c=1;c最大值)
{
max=arr[c];
}
}
最小值=数组[0];
对于(c=1;c对于(i=0;iarray[N]可能是大小为0的数组,因为未设置N

将值读入数组[i]后,您可以执行以下操作:

array[i]=arr[j];
所以数组[I]中的值现在等于arr[j]中的值,因为没有设置为任何值,所以它将为0


使用arr的其他循环也将是0,因为arr从未设置为任何值。

您提到的代码几乎没有问题。首先这里

int N;
double array[N];
什么是
N
值?由于
N
未初始化,它可能会获取垃圾数据并试图创建包含大量元素的数组,从而导致未定义的行为

#define N 5
或者做以下两个陈述 printf(“请输入数组的最大大小:”); scanf(“%d”和“&N”); 在声明
数组之前

int N;
printf("Please enter maximum size of the array: ");
scanf("%d",&N);
double array[N];/* this works if compiler supports VLA */
for (i=0; i<count; i++) {
       sum = sum + arr[i];
}
average = sum/count; /* do only once */
Number = count;
其次,当你
array[i]=arr[j];
arr[j]
包含什么?这是垃圾。你喜欢吗

arr[j] = array[i];
as
数组[i]
包含用户已扫描的数据

也考虑用例,假设用户输入<代码> N< /代码>为<代码> 5 > /代码>如果用户按<代码> y>代码>内<代码>,而(1) >大于<>代码> 5 /代码>比访问数组中的边界数据导致<强>未定义行为< /强>。

int N;
printf("Please enter maximum size of the array: ");
scanf("%d",&N); /* let say 5 */
double array[N]; /* max you can store 5 elements */
while(1){ /* it breaks when user press n or N */
   printf("Do you want to enter a number? ");
   scanf(" %c",&YesNo); /* what if user didn't press n or N after 5 times, loop doesn't break which makes array[i] going out of bound */
   if(YesNo =='y' || YesNo == 'Y'){
      scanf("%f", &array[i]); /* this cause problem if user has press y or Y more than N(5) times */
      arr[j] = array[i];
      /* some code */
    }
}
最后是求平均值

for (i=0; i<count; i++) {
       sum = sum + arr[i];
       average = sum/count;
       Number = count;
}
示例代码(根据您的代码进行修改)

int main(无效){
int N=0,i=0,c=0;
双倍和、平均值、最小值、最大值;
printf(“请输入数组的最大大小:”);
scanf(“%d”和“&N”);
双数组[N];
双arr[N];
char YesNo='y';
整数计数=0;
while(计数最大值)
{
max=arr[c];
}
}
printf(“数组中的最大元素:%lf\n”,最大值);
最小值=数组[0];
对于(c=1;c对于(i=0;i
double array[N];
N
的值是多少?你的要求不清楚。你能更具体一点吗?
scanf(“%f”),&array[i]);array[i]=arr[j]
向后看。在
%c
前面加一个空格,因为当您按ENTER kwy时,这将消耗缓冲区中剩余的新行字符。
scanf(“%c”,&YesNo);
-->
scanf(“%c”,&YesNo);
int main(void) {
        int N=0,i=0 ,c=0;
        double sum, average, min, max;
        printf("Please enter maximum size of the array: ");
        scanf("%d",&N);
        double array[N];
        double arr[N];
        char YesNo = 'y';
        int count = 0;
        while(count < N) {
                printf("Do you want to enter a number? ");
                scanf(" %c",&YesNo);

                if(YesNo =='y' || YesNo == 'Y'){
                        printf("Enter number: ");
                        scanf("%lf", &array[count]);
                        arr[count]=array[count];
                        count++;
                }
                else
                        break;
        }
        max = arr[0];
        for (c = 1; c < count; c++) {
                if (arr[c] > max)
                {
                        max = arr[c];
                }
        }
        printf("max ele in array : %lf \n",max);
        min = array[0];
        for (c = 1; c < count; c++) {
                if (array[c] < min)
                {
                        min = array[c];
                }
        }
        printf("min ele in array : %lf \n",min);
        for (i=0; i<count; i++) {
                sum = sum + arr[i];
        }
        average = sum/count;
        printf("Avg of array elements : %lf\n",average);
        return 0;
}