Считывание Array Elements возвращает странный номер;

0

Когда я начал свое обучение в программировании почти год назад, я играл с массивами на C.

Это код, который я пишу:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>

#define WARY 1000

int main() {
  srand(time(0));  // Initialisierung des Algorithmus für rand()
  int a = 0, zahl = 0, rep = 0, wertmin, wertmax, eins, zwei, drei, vier, fuenf,
      sechs, sieben, acht, neun, zehn;
  int zary[WARY];
  for (a = 0; a < WARY; ++a) {
    zary[a] = rand() % 10 +
              1;  // Befüllen des Arrays mit Zufallszahlen (Bereich von 1-10)
  }
  for (a = 0; a < WARY; ++a)  // Ausgabe aller Elemente des Arrays
  {
    printf("Inhalt von zary[%i]", a);
    printf("ist: %i \n", zary[a]);
  }

  a = 0;  // Initialisierung min/max mit Element der 1.Stelle des Arrays
  wertmax = zary[a];
  wertmin = zary[a];

  for (a = 0; a < WARY; ++a)  // Durchsuchen des Arrays nach Min/Max
  {
    if (wertmin > zary[a]) wertmin = zary[a];
    if (wertmax < zary[a]) wertmax = zary[a];
  }

  printf("Das kleinste Element der Tabelle ist %i\n", wertmin);
  printf("Das groesste Element der Tabelle ist %i\n", wertmax);

  for (a = 0; a < WARY; ++a)  // Zählen der Häufigkeit aller Elemente des Arrays
  {
    switch (zary[a]) {
      case 1:
        eins++;
        break;
      case 2:
        zwei++;
        break;
      case 3:
        drei++;
        break;
      case 4:
        vier++;
        break;
      case 5:
        fuenf++;
        break;
      case 6:
        sechs++;
        break;
      case 7:
        sieben++;
        break;
      case 8:
        acht++;
        break;
      case 9:
        neun++;
        break;
      case 10:
        zehn++;
        break;
      default:
        printf("Fehler\n");
    }
  }
  printf(
      "Elemente des Arrays sind:\n %i (1)er\n; %i (2)er\n; %i (3)er\n; %i "
      "(4)er\n; %i (5)er\n; %i (6)er\n; %i (7)er\n; %i (8)er\n; %i (9)er\n; %i "
      "(10)er\n",
      eins, zwei, drei, vier, fuenf, sechs, sieben, acht, neun, zehn);

  return 0;
}

Последнее намерение этого кода состояло в том, чтобы заполнить массив случайными числами от 1 до 10, а затем зачитать элементы массива и как часто они появляются.

Он работает довольно хорошо, но каждый раз, когда он говорит, что его число превышает 4.000.000 раз.

Где моя ошибка?

  • 0
    Пожалуйста, оставьте комментарий на английском. извини, я не знаю твой язык
  • 4
    @ SGG NW не понимаю, ваш коммит.
Показать ещё 1 комментарий
Теги:
arrays

2 ответа

5
Лучший ответ

Вам необходимо инициализировать все eins,zwei,drei,vier,fuenf,sechs,sieben,acht,neun,zehn до 0 до блока switch.

eins = 0;

и так далее.

  • 0
    (Argh-- Эта первая строка цементирует "Sonne" Rammstein в моей голове до конца дня!)
  • 0
    Большое спасибо, сэр, вы правы. Я действительно должен помнить, чтобы всегда инициализировать мои переменные, прежде чем что-либо делать с ними.
3

Вы увеличиваете свои переменные (например, eins) до их инициализации. Технически это неопределенное поведение.

Вам нужно написать int eins = 0; и т.д. или включают линию

eins = zwei = drei/*etc */= 0;

после объявления, но до любого ++.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню