txt tabelle auslesen

aaaaaaalter .... nice ... ultra cool danke! .... ja i know ... ein wenig grob formuliert. Wie gesagt; stehe noch am Anfang meiner C laufbahn von daher verzeiht mir mein noch chaotisches gefrage x)
 
ok komme doch unglaublich schlecht voran ... verstehe es irgendwie doch nicht wirklich ...
Die Tabelle:

Year Sex Height
1962 m 1.90
2001 f 1.71
2003 m 1.80
1967 f 1.52
....
etc

Ausgabe soll am Ende ungefähr so aussehen:

mean year: 2001
number males: 46
number females: 33
mean height males: 1.69
mean height females: 1.56

habe jetzt ca das

int main(void) {
String table = s_read_file("people.txt");
printsln(table);

return 0;
}


int main (){
int Year;
int SexM;
int SexF
float HeightM;
float HeightF;

for(spalte2; spalte2 = m; SexM++);
else(SexF++);

printf("Durchschnittliches Geburtsjahr: %d", Year);
printf("Anzahl Männer: %d", SexM);
printf("Anzahl Frauen: %d", SexF);
printf("Durchschnittliche Körpergröße Männer: %f", HeightM);
printf("Durchschnittliche Körpergröße Frauen: %f", HeightF);
return 0;
}

(dass mit den printf wie das funtzt hab ich dank dir schonmal gerallt jetzt ... immerhin ^^*)
p vll ist es eigtl voll einfach und ich denke einfach nur viel zu kompliziert -.-*
 
Zuletzt bearbeitet:
Hallo

Ich glaube, du hast da etwas falsch verstanden.
Meine Erläuterungen zu Präfix, Suffix etc. hiessen nur, dass, wenn es eine Funktion gibt, die diese Präfixe und Suffixe hat, die Präfixe und Suffixe entsprechend das bedeuten. Nicht umgekehrt.

Zudem scheinst du das Konzept von C nicht richtig verstanden zu haben. Darf man fragen, ob du das autodidaktisch/für einen gewissen Zweck/für eine Hochschule machst?

Ich versuche mal, aufzuklären:
Du hast in deinem Code 2 main-Funktionen. Das ist nicht erlaubt.
Ein C-Programm ist eigentlich nur eine Sammlung von Funktionen. Eine .dll unter Windows ist eigentlich ziemlich dasselbe wie eine .exe (.so / executeable unter *nix): Es sind nur Funktionen drin gespeichert.

Wenn du nun ein Programm startest, muss dein Betriebssystem wissen, von welcher Funktion es ausgehen musst. Diese nennt man "Entry Point" (oder auf Deutsch "Einstiegspunkt"). Normalerweise ist das die int main(int argc, char** argv), kann aber auch zu int main() vereinfacht werden.
2 Funktionen mit demselben Namen sind allerdings niemals erlaubt (Ausnahme: Overloaded functions in C++, wobei auch die für das System eigentlich anders (eindeutig) heissen).
Du kannst zwar Funktionen wie s_read_file() selbst definieren, allerdings macht das in diesem Zusammenhang wenig Sinn.

"String" gibt es gar nicht. Wenn schon, dann std::string und das ist C++. Wenn du nur C, willst, müsstest du für Strings jeweils char* verwenden.

Der Code von sheel hat dir eigentlich schon ziemlich alles gezeigt:
Du öffnest die Datei zuerst und liest sie dann mit while(3==fscanf...) aus. Die Durchschnitte kannst du dann mathematisch eruiren.

Das war jetzt viel Text mit wenig Inhalt, oder?

Wir als Forumscommunity stehen bei solchen Fragen immer ein bisschen im Kakao: Es wäre für sheel ein Leichtes (ich schätze mal 5 Minütchen), dir den Code fertig hinzuwerfen und viel Spass damit zu wünschen, aber wir glauben, dass man so nichts lernt. sheel kann schon diesen Code schreiben, ich (glaube ich :p) auch. Es geht darum, dass du ihn verstehst. (Fisch-Zitat einfügen)

(Fast) alles, was du für deine Aufgabe braucht, hat dir sheel einige Posts höher gegeben. Du kannst natürlich immer versuchen, etwas komplett eigenes zu machen, aber gerade, wenn du lernen willst, solltest du erst den "normalen" Weg verstanden haben.

Ich will damit auch nicht gemein sein, aber ich gebe dir folgenden Rat:
Schaue dir den Code an, den sheel gepostet hat. Verdaue ihn, und füge die einzelnen Stücke (intelligent) zusammen. Wenn dann etwas nicht läuft, darfst du natürlich fragen. Du darfst auch immer wieder theoretische, konzeptuelle Fragen stellen. Aber der Code, den du gepostet hast, enthält keine Fragen, keinen Ansatz; er kompiliert nicht einmal.

Zumindest ich kann dir kein komplettes Tutorial schreiben, dafür fehlt mir schlicht die Zeit, aber du kannst viele im Internet finden.

Also, als Teilaufgabe für dich:
Schaue dir sheels Codeschnippel an und baue aus diesen Bausteinen etwas, lasse es durch den Compiler laufen, schaue dir die Fehler an, schaue, ob du sie selbst beheben kannst, und sollte dem nicht so sein, dann fragst du hier und wir beantworten dir deine Frage voller Freude.

Aber wenn wir zuerst die Glaskugel anschmeissen müssen, um zu wissen, was du weisst, was nicht und was genau das Problem ist, dann dämpft das unsere Motivation auch ein bisschen.

Ich habe jetzt frecherweise für alle geschrieben. Zustimmungen/Widersprüche sind also nötig, um die Aussagen zu veri- oder falsifizieren :)

Gruss
cwriter
 
ah ja gut ok^^* kk dann werd ich mich da nochmal ein wenig reinhängen und mir das genauer anschauen... vll sollte ich nochmal schauen bei 0 an zu fangen mit ein paar tutorials etc ...

und jo ich brauchs für die uni ... leider sind die "zur verfügung gestellten hilfsmittel" mehr konfuser irrsinn (aussage von jemanden der schon etwas weiter ist mir aber leider nicht wirklich helfen kann/darf)
Und wie man dass ganze überhaupt macht wird uns erst nach abgabetermin in den vorlesungen erklärt... was ein wenig sinnfrei ist aber jut ... naja

Trotzdem danke für die hilfe und die mühe!!!
ich schau mal ob ich es doch irgendwie hinbekomme :confused:
problem ist: alles was ich von der uni bekomme ist irgendwie ziemlich anders als alles was ich sonst zu C finde bzw höre.

der teil

int main(void) {
String table = s_read_file("people.txt");
printsln(table);

war vorgegeben ...
Aber "string" gibt es nicht in C?

Beste grüße und vielen dank nochmal!
 
Noch was zum oberen Beitrag zuerst:
Da sind einige Probleme drin, wo es an der (fürs Programmieren nötigen) Genauigkeit mangelt, zB.
*Variablen, mit denen von 0 weg gezählt werden soll, am Anfang nicht auf 0 gesetzt.
*Variablen (und Funktionen) verwendet, die es nicht gibt (oder doppelt gibt)
* m ist eine Variable, 'm' ist ein Buchstabe.
*for gefolgt von else gibts nicht. else ist nur für if.
...
und hier im neueren Beitrag: string und String sind zwei komplett verschiedene Sachen.

Zum neuen Beitrag:
Genau: string, String, s_read_file und printsln gibt es nicht; alle könnten jedoch selber gemacht werden. (Aber die Implementierung einer Stringklasse ist auf dem Level vermutlich nicht gefordert, und schon gar nicht so nebenbei). Vllt. einmal abklären, was der Lehrer da von euch haben will.

PS: Bitte Codetags verwenden.
 
Erweiterte Suffixe:
  1. -_s: Beachte den Unterstrich. Ist von Microsoft erzwungen, falls du mit Visual Studio arbeiten willst. Steht für "Secure" und bedeutet, dass du Maximallängen angeben (oder, bei Dateien, eine zusätzliche Errormessage abfrangen) musst, um Overflows vorzubeugen. Auch hier: Lass dich nicht verwirren. Du wirst das wahrscheinlich nie brauchen, wenn du auf Linux programmierst oder unter Windows die Fehlermeldungen deaktivierst.
Der C11-Standard definiert viele Funktionen mit _s, z.B. scanf_s usw.
Das kann also auch außerhalb von VisualStudio und in Linux sehr wohl vorkommen.
 
Der C11-Standard definiert viele Funktionen mit _s, z.B. scanf_s usw.

http://www.cplusplus.com/forum/beginner/2300/



Ich habe mal ganz kurz gegooglet und nichts gefunden. C++11 ist nun doch schon alt und spezifiziert (wenn auch nicht überall gleich gut umgesetzt), sodass ich schon recht blind umhergewandert sein müsste (was durchaus sein kann), wenn ich das noch nicht sah.

Und für die VS-Standard-Nörgler (Gruss an @sheel): VS2015 arbeitet auch mit Clang/LLVM :p

Wenn du eine Quelle dafür hast, dass _s standardisiert ist: Immer her damit :)

Gruss und schöne Festtage
cwriter

Aktuellere Quelle: http://stackoverflow.com/questions/18836661/header-for-scanf-s-function
 
VS2015 arbeitet auch mit Clang/LLVM
Ich weiß, aber meine Kritik war ja auch immer nur am MS-Compiler, der bei Clangeinsatz ja nicht verwendet wird :p
(auch wenn die GUI auch nicht meine erste Wahl ist, schlecht ist sie sicher nicht)
((zumindest denke ich nicht, irgendwann auch darüber schlecht geredet zu haben :p))

Und scanf_s usw. ist tatsächlich optionaler Bestandteil von C11 (nicht C++11), beschrieben im Anhang Teil K.
In N1548 vom Dezember 2010 ist scanf_s K.3.5.3.4
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1548.pdf

Vom Vorhandensein her ists zwar kein Unterschied (ob optional im Standard oder nur von MS dazuerfunden),
aber so hat man immerhin eine Garantie für Verhalten, Parametertypen usw., wenns die Funktion gibt.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück