Forum: PC-Programmierung Wie geht das mit dem Array??


von Martin M. (silent_max)


Lesenswert?

Hi zur späten Stunde.

Ich hocke gerade über folgender Thematik:

Ich möchte in C über einen Array zuerst den Notendurchschnitt von einem 
bestimmten Unterrichtsfach und dann von mehreren Unterrichtsfächern 
berechnen.

Soweit sieht es dann aus:

/*
  Datum:  24.02.2010
  Thema:  Zeugnisdurchschnitt
*/

#include <stdio.h>

int Kurzarbeita;
int Schulaufgabea;
int Kurzarbeitb;
int Schulaufgabeb;
int mündlicha;


int Deutsch[4];

int main (void)

{
  printf("Es wird der Notendurchschnitt im Fach Deutsch errechnet!!");
  printf("\n\Dazu ist es notwendig, die Noten einzugeben!!\n\n");

  printf("\n\Geben Sie nun die Note der\n\n");
  printf("\n\1. Kurzarbeit ein:\n\n");
  scanf("%d", Kurzarbeita);

  printf("\n\1. Schulaufgabe ein:\n\n");
  scanf("%d", Schulaufgabea);

  printf("\n\2. Kurzarbeit ein:\n\n");
  scanf("%d", Kurzarbeitb);

  printf("\n\2. Schulaufgabe ein:\n\n");
  scanf("%d", Schulaufgabe);


  return 0;
}

Wenn ich jedoch bei der Stelle auf Debuggen gehe, kann ich zwar die 
erste Note eingeben, aber dann gar nix mehr. Woran liegt das??

Und da habe ich ein paar Fragen bzgl. dem Array. Bei Array ist ja eine 
Zusammenfassung von mehreren Variablen des gleichen Datentyps unter 
einem neuen Namen.

Bloß wie weiß ich nun dem Array zu, dass z. B. eine Schulaufgabe einen 
doppelten Wert hat??

Mir kommt gerade ... müsste ich die Kurzarbeiten und die Schulaufgaben 
in zwei unabhängigen Schleifen programmieren und dann dem Array 
zuweisen??

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Abgesehen davon, daß es eine ganz schlechte Idee ist, scanf direkt auf 
Konsoleninput loszulassen, übergibst Du scanf falsche Parameter. Wie 
soll scanf in Deine Variablen irgendwelche Werte eintragen, wenn Du sie 
als Wert übergibst ("call-by-value")?

scanf erwartet Pointer.
Also:

  scanf("%d", &Kurzarbeita);

etc.

Was aber das mit einem Array zu tun haben soll, wirst Du selbst 
ergründen müssen.

von Rolf M. (rmagnus)


Lesenswert?

Martin Müller schrieb:

> Wenn ich jedoch bei der Stelle auf Debuggen gehe, kann ich zwar die
> erste Note eingeben, aber dann gar nix mehr. Woran liegt das??

Ich glaube dir nicht, daß das oben gezeigte Programm dieses Verhalten 
zeigt. Es läßt sich nämlich nicht einmal compilieren.

> Und da habe ich ein paar Fragen bzgl. dem Array. Bei Array ist ja eine
> Zusammenfassung von mehreren Variablen des gleichen Datentyps unter
> einem neuen Namen.

Sozusagen.

> Bloß wie weiß ich nun dem Array zu, dass z. B. eine Schulaufgabe einen
> doppelten Wert hat??

Das einzige Array, das in deinem Programm vorkommt, ist:
1
int Deutsch[4];

Das heißt nichts weiter, als daß Deutsch nicht ein Integer ist, sondern 
vier, auf die man als Deutsch[0], Deutsch[1], Deutsch[2] und Deutsch[3] 
zugreifen kann.

von Johannes K. (anamollo)


Lesenswert?

Außerdem macht das Programm in der Praxis keinen Sinn, denn du hast 
keine Möglichkeit, die eingegebenen Werte (Noten...) zu speichern.
Will heißen, dass du bei jedem Programmstart die ganzen Noten neu 
eintragen musst.

Entweder schreib sie mittels fread/fwrite/fputs/fgets in eine Datei oder 
verwende Excel ;-)

von Maddin (Gast)


Lesenswert?

/ Ich möchte in C über einen Array zuerst den Notendurchschnitt von 
einem
/ bestimmten Unterrichtsfach und dann von mehreren Unterrichtsfächern
/ berechnen.


Da Du anscheinend in C schreiben möchtest und nicht mußt (genauso ging 
es mir auch) kannst Du ja mal einen Blick auf Python werfen. In der 
Sprache lässt sich sowas mit wesentlich weniger Code erstellen.

Gruss

Maddin

von Roman94 (Gast)


Lesenswert?

Bei mir hat er mal einen Fehler markiert wegen "scanf"
Er schlug mir vor "scanf_s" und es ging :)

von Nils S. (kruemeltee) Benutzerseite


Lesenswert?

>Ich glaube dir nicht, daß das oben gezeigte Programm dieses Verhalten
>zeigt. Es läßt sich nämlich nicht einmal compilieren.
Natürlich, gibt aber eine Warnung.

>Außerdem macht das Programm in der Praxis keinen Sinn, denn du hast
>keine Möglichkeit, die eingegebenen Werte (Noten...) zu speichern.
Sinn machen tut sowieso nix ;)
Hast du auch mal angefangen eine Programmiersprache zu lernen?

>Da Du anscheinend in C schreiben möchtest und nicht mußt (genauso ging
>es mir auch) kannst Du ja mal einen Blick auf Python werfen. In der
>Sprache lässt sich sowas mit wesentlich weniger Code erstellen.
Wie soll das weniger werden? Um drei Strings einzulesen braucht man 
ebenso drei Funktionsaufrufe und die vielen printf sind halt nunmal so 
wie er das will.

von Roman94 (Gast)


Lesenswert?

Falls man weniger "printf" haben will muss man verstärkt mit 
ESC-Sequenzen arbeiten

von Nils S. (kruemeltee) Benutzerseite


Lesenswert?

Naja, aber ob ich da jetzt zweimal printf("bla\n") oder einmal 
printf("bla\nbla") schreibe, juckt so ziemlich niemanden.

Geht ja wahrscheinlich darum, dass Python da viel kürzer sei, was ich 
abstreite (python kann ich).

von Rolf Magnus (Gast)


Lesenswert?

Nils S. schrieb:
>>Ich glaube dir nicht, daß das oben gezeigte Programm dieses Verhalten
>>zeigt. Es läßt sich nämlich nicht einmal compilieren.
> Natürlich, gibt aber eine Warnung.

Und das, obwohl es den undefinierten Namen "Schulaufgabe" referenziert? 
Mit welchem Compiler hast du das denn hinbekommen?
(Ich weiß natürlich, welcher Name eigentlich gemeint war und könne den 
leicht ersetzten, aber an der Stelle weiß ich schon, daß die 
Fehlerbeschreibung sich nicht auf die Version des Programms bezieht, die 
gepostet wurde. Ich weiß dann nicht, was es da noch alles für 
Unterschiede gibt).

>>Außerdem macht das Programm in der Praxis keinen Sinn, denn du hast
>>keine Möglichkeit, die eingegebenen Werte (Noten...) zu speichern.
> Sinn machen tut sowieso nix ;)

Doch, klar. Siehe http://www.sinn-macher.de/ ;-)

von Karl H. (kbuchegg)


Lesenswert?

Nils S. schrieb:

>>Außerdem macht das Programm in der Praxis keinen Sinn, denn du hast
>>keine Möglichkeit, die eingegebenen Werte (Noten...) zu speichern.
> Sinn machen tut sowieso nix ;)
> Hast du auch mal angefangen eine Programmiersprache zu lernen?

Ich geb zu: Als ich diese Antwort das erste mal gelesen habe, dachte ich 
auch: "Was für ein arroganter Arsch"

Ich hab dann aber gemerkt, dass Nils etwas ganz anderes ausdrücken 
wollte: Wenn man anfängt das Programmieren zu lernen, dann sehen die 
ersten Programme nun mal so aus. Das ist ganz normal. Einem Anfänger 
Fileverwaltung aufschwatzen zu wollen ist grob fahrlässig. Erst mal soll 
er mit printf/scanf, Variablen, Arrays klar kommen. Files kommen vieeel 
später.

In diesem Sinne deckt sich dann Nils Aussage auch mit meiner Denkweise 
und wahrscheinlich die der meisten hier.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.