@Bushmaster Ommmm. Hör bitte auf mit deinem OT. In diesem Thread geht es um etwas anderes. Danke.
@furk Was Wutz da oben schon gesagt hat:
Indem du in main() das Array definierst und an beide Funktionen als Parameter inkl. der Länge übergibst.
#define CRT_SECURE_NO_WARNINGS
#include <assert.h> // assert()
#include <stddef.h> // size_t
#include <stdio.h>
#include <stdlib.h>
// max ist ein unguenstiger name fuer symbole beim microsoft-compiler weil die windows-header
// die offenbar auch ab und an von den c standard library headern eingebunden werden ein makro
// namens max definieren das mit deiner Funktion max() kollidiert. Darum:
#undef max
typedef enum {
ERR_NONE,
ERR_INPUT,
ERR_AMOUNT,
} error_t;
size_t read_values(double *destination, size_t max_values, error_t *error)
{
assert(destination && max_values && error);
*error = ERR_NONE;
size_t num_values_requested;
if (scanf_s("%zu", &num_values_requested) != 1) { // immer die rueckgabewerte pruefen!
*error = ERR_INPUT;
return 0;
}
if (num_values_requested > max_values) {
*error = ERR_AMOUNT;
return 0;
}
for (size_t num_values_read = 0; num_values_read < num_values_requested; ++num_values_read) {
if (scanf_s("%le", &destination[num_values_read]) != 1) {
*error = ERR_INPUT;
return num_values_read;
}
}
return num_values_requested;
}
double max(double const *source, size_t num_values)
{
assert(source && num_values);
size_t max = 0; // erstes element als maximum annehmen
for (size_t i = 1; i < num_values; ++i) // alle weiteren elemente durchgehen
if (source[i] > source[max]) // und das alte (zuerst angenommene) maximum
max = i; // mit dem aktuellen element vergleichen und ggf.
// max neu aktualisieren.
return source[max];
}
int main(void)
{
enum { max_values = 100 };
double values[max_values];
error_t error;
size_t values_read = read_values(values, max_values, &error);
if (error != ERR_NONE) {
switch (error) {
case ERR_INPUT:
fputs("Input Error :(\n\n", stderr);
return EXIT_FAILURE;
case ERR_AMOUNT:
fputs("Too many values requested :(\n\n", stderr);
return EXIT_FAILURE;
default:
fputs("An unknown error occured (shouldn't happen!?) :(\n\n", stderr);
return EXIT_FAILURE;
}
}
if (!values_read)
puts("There is no maximum in a set of zero values.\n");
else printf("The maximum is %f.\n\n", max(values, values_read));
}