c - 从 fgets 字符数组中删除空格

标签 c

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

关于c - 从 fgets 字符数组中删除空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54280073/

相关文章:

c - 大缓冲区的位弹出计数,带有 Core 2 CPU (SSSE3)

c - 具有许多数字的随机数组出现错误

c - 如何创建新行之前的隐形空间?

html - 如何在没有客户端脚本的情况下让 Web 客户端处理表单以将页面 ID 信息发送到服务器

c - 传输端点未连接 bluez

c - 在 Turbo C 中搜索二进制文件

c - 我在 queue.h 中的修改是否由 Berkeley 实现?

c - 在c中动态分配动态分配的字符串数组

c - 为什么我的窗口每次移动时都不会覆盖自己?

c - 我如何将字符数组传递给我的函数