我试图让一个程序计算一个给定字符串中整数的平均值,将它们相加,直到遇到-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);
}

09-28 09:08