【发布时间】:2018-09-09 00:44:09
【问题描述】:
目前我正在做一个学术任务,这似乎非常简单和基本,但不幸的是我不知道为什么我会收到这个奇怪的输出。
这个想法是这样的:要求用户输入一些浮点数,这些浮点数被保存到名为T[N]的浮点数组中。现在,当用户点击0 并输入时,while() 循环停止,程序应该计算已插入数字的总和和平均值,但是因为我使用了 size 控制变量,它会执行它仅对最后输入的元素,其索引等于size - 1,由于索引thingy。出于 I/O 控制的目的,我想检查输入的数字是否与屏幕上出现的带有 printf() 的数字相同,但是我从插入的 N 中只得到 2 参数(它总是 @987654331 @ 和 4th),当然 sum 和 avg 之后会被严重扭曲。有什么想法吗?
这是一个基本代码:
int sum(const float * tab, unsigned int size, float *result) {
unsigned int i = 0;
for (i = 0; i < size; i++) {
*result += *tab;
}
return 1;
}
int avg(const float* tab, unsigned int size, float *result) {
sum(tab, size, result);
*result = *result / size - 1;
return 1;
}
int main() {
unsigned int size = 1, i;
float T[N], val = 0, wynik;
float *result = &wynik, *tab = T;
while (scanf("%f", &val) == 1 && val != 0) {
if (scanf("%f", &val) == 0) {
printf("Wprowadzono niepoprawny znak. Koczenie...\n");
return 0;
}
else if (val == 0) {
break;
}
else {
*tab = val;
tab++;
size++;
}
}
tab = T;
for (i = 0; i < size - 1; i++) {
printf("%.2lf ", *tab);
tab++;
}
tab = T;
sum(tab, size, result);
printf("\nSuma elementow tablicy T[%u]: %lf\n", size - 1, *result);
avg(tab, size, result);
printf("Srednia elementow tablicy T[%u]: %f\n", size - 1, *result);
/*if (scanf("%f", &val) == 0) {
printf("Wprowadzono niepoprawny znak. Konczenie...\n)";
}
else if (val == 0) {
break;
}*/
getch();
return 1;
}
这就是程序从用户输入中读取 0 时实际发生的情况:
编辑。不要介意这种 %.lf 和 %.f 数据类型,我只是没有替换它,反正最终结果是一样的。
【问题讨论】:
-
"静态浮点数组" ???你的数组不是静态的......只是说“浮点数组”,该死你的代码很丑。
-
静态我的意思是:#define N 100 ... float T[N];你现在明白了吗?
-
“N在开头定义为100”。不要在叙述中说出来,发布显示问题的Minimal, Complete, and Verifiable example。在问题中将输入、预期输出和实际输出显示为 text。
-
@TheInvisibleMan:这个英文单词“static”的用法没问题,但
static在C语言中有特定的含义,所以在讨论时应避免使用具有一般英文含义的“static” C 除非你确保上下文清楚。 -
我建议你把作业分成几部分,一次做一个部分。首先,编写一个读取数字并在输入零时停止的程序。只需在读取时打印每个数字。当它工作时,修改程序以将所有数字记录在一个数组中,然后在最后打印它们。当它工作时,修改程序以添加数字并打印总和。当它起作用时,修改程序以计算平均值。
标签: c arrays function loops pointers