我试图让一个程序计算一个给定字符串中整数的平均值,将它们相加,直到遇到-1
,样本输入为1 2 3 4 5 -1
。
如何从数组中删除空格以便计算和?
#include <stdio.h>
#include <stdlib.h>
#include "source.h"
#include <string.h>
#include <ctype.h>
#define MAX_LEN 1000
void calculate_average() {
int test, size, sum, i, j, k, temp;
int grade;
char input[MAX_LEN];
char formattedInput[MAX_LEN];
double avg;
size = 0;
avg = 0.0;
test = 1;
k = 0;
sum = 0;
fgets(input, 10, stdin);
for (j = 0; j < strlen(input); ++j) {
if (input[j] = ' ') {
;
} else {
temp = input[j];
formattedInput[k] = temp;
++k;
}
}
for (i = 0; atoi(input[i]) != -1; ++i) {
if (atoi(formattedInput[i]) == -1) {
test = -1;
avg = sum / size;
} else {
++size;
sum = sum + atoi(formattedInput[i]);
}
}
printf("%f\n", avg);
}
最佳答案
我建议您使用strtod
来处理输入字符串,而不需要预处理,
作为原始代码中的旁注,sum / size
将强制转换为int
并且您将失去精度,因此您首先需要强制转换
我改变你的功能如下
#define MAX_LEN 1000
void calculate_average(){
int sum = 0;
int count = 0;
char input[MAX_LEN];
fgets(input, 10, stdin);
char *start, *end;
start = input;
while(1){
int temp = strtod(start, &end);
if(temp == -1)
break;
if(*end == 0)
break;
start = end;
sum += temp;
count++;
}
double avg = (double)sum / count;
printf("%f\n", avg);
}