gpt4 book ai didi

c - 为什么我的程序在完成之前只接受一个输入?

转载 作者:行者123 更新时间:2023-11-30 14:50:18 24 4
gpt4 key购买 nike

该程序使用一个数组和三个函数来读取输入,对输入整数的个位和十位求和,并计算输入整数的平均值。为什么我无法获得多个正整数输入?程序在有效整数限制内的一个输入后运行。

#include <stdio.h>

int read_data(int Ar[]);
void comp_sums(int Ar[], int size); // prototypes
double comp_avg(int Ar[], int size);

int main()
{
int Ar[100];
int size;
double avg;
size = read_data(Ar);
comp_sums(Ar, size);
avg = comp_avg(Ar, size);
printf("The average of the integers in the array: %lf\n", avg);
}

int read_data(int Ar[]) // reads inputted integers, stores in array
{
int flag;
char ch;
int i,j, num;

flag = 1;
i = 0;
while (flag == 1) {
printf("Please enter an integer:\n");

j = scanf("%d", &num);
if (j != 1) {
break;
}

if (num < 0) {
continue;
} else if (num >= 100) {
flag = 0;
} else {
Ar[i] = num;
i++;
}
return i;
}
}


void comp_sums(int Ar[], int size) /* computes sum of ones and tens place of the inputted integers into the array*/
{
int i, j;
int sum_ones, sum_tens;
sum_ones = 0;
sum_tens = 0;
for (i = 0; i < size; i++) {
sum_ones += Ar[i] % 10;
j = Ar[i] / 10;
sum_tens += j % 10;
}
printf("The sum of the ones is: %d\n", sum_ones);
printf("The sum of the tens is: %d\n", sum_tens);
}

double comp_avg(int Ar[], int size) // computes average of integers
{
int i, sum;
double avg;
sum = 0;
for (i = 0; i < size; i++) {
sum += Ar[i];
}
avg = (double)size / sum;
return avg;
}

最佳答案

当你使用数组作为参数时,你也必须获取长度,因为你必须检查你的读/写是否越界。忘记一个其次,返回的位置不正确,用户可以输入更多内容值超出了数组可以容纳的值,并且您没有采取任何措施来防止缓冲区溢出。

因此,要修复您的 read_data 函数:

int read_data(int Ar[], size_t len)
{
if(Ar == NULL || len == 0)
return 0;

int i = 0, j, num;

// imortant to check the bounds
while (i < len) {
printf("Please enter an integer:\n");

j = scanf("%d", &num);
if (j != 1) {
break;
}

if (num < 0) {
continue;
} else if (num >= 100) {
break;
} else {
Ar[i] = num;
i++;
}
}

return i;
}

我删除了 flag 位,因为如果 num >=100,您将结束循环不管怎样,所以break要简单得多。意图也更加明确。

现在您可以调用它:

int main()
{
int Ar[100];
int size;
double avg;
size = read_data(Ar, sizeof Ar / sizeof *Ar);
...
}

关于c - 为什么我的程序在完成之前只接受一个输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49078299/

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