我正在尝试制作一个程序,计算给定字符串中整数的平均值,然后将其相加,直到遇到-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);
}
答案 0 :(得分:2)
我建议您使用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);
}
答案 1 :(得分:1)
您可以将sscanf
和%n
格式说明符一起使用以空格分隔的数字来读取。
示例:
int temp = 0;
int bytesread = 0;
char *ptr = input;
while (sscanf(ptr, "%d%n", &temp, &bytesread) > 0 && temp != -1) {
ptr += bytesread;
sum = sum + temp;
}
%n
将返回从字符串读取的字节数,因此使用此值将ptr
移至指向下一个数字。