C Übungen
-
Wenn du leichte Übungen suchst, dann würde ich dir folgende empfehlen (die haben mir persönlich Spaß gemacht und ich habe einiges dabei gelernt):
-Primzahlen suchen (daran kann man immer weiterarbeiten - Geschwindigkeit optimieren, Primzahlen in Dateien ein-/ausgeben,...) - macht mir immer wieder Spaß
-Sortieralgorithmen erstellen (es gibt einige einschlägige, du findest garantiert irgendwo eine "Lösung", falls nötig - aber für den Anfang sollte das leicht sein)
-eventuell Befehle, die du aus Paketen importierst, selbst erstellen - das dient dem Verständnis und du kannst das für beliebig viele Befehle tun (ich musste das mit einer ganzen Reihe von String-Operationen machen)
z.B.: Wörter ordnen, Strings aneinanderkopieren, Länge ermitteln, ...
-du kannst dir auch einfach selbst was einfallen lasse, das du gern umsetzen würdest - das funktioniert für mich immer ziemlich gut, weil es dann nicht an Motivation mangelt (für unlösbare Fragen ist ja dieses Forum da)
PS: Ich habe das alles mit C gemacht, die String-Operationen könnten mit C++ übungsuntauglich sein (weiß ich aber nicht)
-
schreib ein programm, das eine textdatei einliest. die häufigkeit eines jeden buchstabens gespeichert werden. überleg dir dafür einen geegneten datentypen.
alle buchstaben sind als großbuchstaben zu behandeln, die deutschen umlaute sollen ebenfalls berücksichtigt werden.
am ende soll eine zusammenfassung angezeigt werden, wie oft jeder buchstabe in der datei vorkommt.mfg,
_o_
-
Vielen Dank werd ich alles probieren.
MfG
Lone
-
Hallo nochmal.
Ich schau mir gerade das Thema Kommandozeilenparamter an und bin ein bisschen ratlos wie ich die in Programmen verwenden soll. Dateien öffnen und löschen kann ich auch mit der Maus unter MSV oder anderen IDE´s . Wann werden die denn wichtig bzw. mussman die doch öfter benutzen als man denkt ? xD
Gruß
Lone
-
die werden dann wichtig wenn:
dein programm an der eingabeaufforderung mit irgendwelchen parametern gestartet werden soll, die den programmablauf steuern.
-
Hast du vielleicht ein Beispiel für mich?
-
<pseudocode>
if argc > 1 && argv[1] then if argv[1] content == "do that" then do_that()
</pseudocode>
wenn du damit nix anfangen kannst, schreib dir am besten ein kleines c-programm, das dir den inhalt des argv arrays ausgibt. das argv-array speichert
die kommandozeilen-parameter.
sind ja bloss ein paar zeilchen.
-
Werd ich mich nochmals genauer mit beschäftigen wenn ich es brauche. Das wäre dann auch besser fürs Verständis.
DankeGruß Lone
-
So ich hab mich wollte das mit den Kommandozeilenparamtern ma testen und hab unter Visual Studio folgendes Programm geschrieben:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>main(int argc, char argv[]) {
double x,y,z;
if(argc < 4) {
printf("\nAufruf: %s zahl1 op zahl2",argv[0]);
exit(1);
}
x=atof(argv[1]);
y=atof(argv[3]);
switch(argv[2][0]) {
case '+':
z=x+y;
break;
case '-':
z=x-y;
break;
case 'x':
z=xy;
break;
case '/':
z=x/y;
break;
default:
printf("\nFalsches Operationszeichen!");
exit(2);
}
printf("%s %s %s = %f",argv[1],argv[2],argv[3],z);
getch(0);
}Das Programm hab ich als Bspl0067.c abgespeichert , aber ich kanns nicht mit der Eingabeaufforderung starten. Er sagt mir immer das er das Programm nicht finden kann. Normalerweise benutze ich die Eingabeaufforderung nicht um Programme zu starten, dafür habe ich mir doch ne IDE geholt...
Was mache ich falsch?
-
Ich möchte mich ja nur auf die Umschulung zum Fachinformatiker -Anwendungstechnik vorbereiten...
Genauso ist es auch mit der Fehlerkontrolle. Da gibt es wieder bestimmte Befehle um Fehler sichtbar zu machen falls ich mit der Eingabeaufforderung arbeite. Das wird aber auch von VS erledigt. Also bleibt nurnoch die Frage wann man solche Sachen wirklich braucht.
-
Dieses Programm soll Texte erfassen und speichern. Mit fprintf schreibe ich in die Datei. Okay nun starte ich das Programm und kann den Dateinamen eingeben und er schreibt die Datei wurde geoeffnet. Beim nächsten Tastendruck geht das Programm jedoch aus obwohl da noch nicht wirklich viel passiert ist. Irgendwas läuft schief...ob es nun an der Eingabeaufforderung liegt oder am Programm ich hab keine Ahnung.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>main() {
FILE *stream;
char zeile[81],dateiname[67];
int zeilen=0;printf("\n\t\tTextzeilen erfassen\n");
printf("\nSpeichern unter >");
gets(dateiname);if((stream = fopen(dateiname,"w")) == NULL) {
printf("Fehler beim Oeffnen!");
exit(1);
}printf("\nLeerzeile beendet das Programm.");
printf("\n--------------------------------\n");gets(zeile);
while(strlen(zeile) > 0) {
fprintf(stream,"%s\n",zeile);
zeilen++;
gets(zeile);
}
fclose(stream);printf("\n%i Zeilen wurden geschrieben.\n",zeilen);
getch(0);
}
-
1. Benutze erstens cpp tags des Forums
2. Mit$ seq 39 | awk '{ text=sprintf("%s%s", text, $1);} END { print text }' | ./deinprogramm
habe ich bereits einen Buffer Overflow erzeugt, denk nach warum. Tipp: man: gets(3) wenn du das gelöst hast, wird wahrscheinlich dein Programm nachher auch gehen.
-
Das Programm stammt aus einem alten Lernbuch und das habe ich mehrmals kontrolliert. Das ist unwahrscheinlich das es am Programm liegt. Visual Studio zeigt auch keine Fehler an und springt in die Konsole rein. Bis jetzt kann ich die Konsole auch nur benutzen um Programme zu öffnen aber nicht zu starten. Da muss irgendwo der Fehler sein. Ich hab auch keine Ahnung wie ich ohne IDE kompiliere oder sontiges. Wenn dieses gets() ein Buffer Overflow verursacht dann müssten die vorherigen Programme alle nicht gehen.
-
gets
kann einen Buffer Overflow erzeugen, muss aber nicht. Ich habe aber einen Fall konstruiert, wo das passiert. Siehefgets(3)
-
Okay das mit der Datei einlesen hat funktioniert das war ein Fehler mit Visual Studio. Jetzt brauch ich nurnoch eine Lösung für das 1. Programm. Über die Eingabeaufforderung öffnet er nur das Programm mit Visual Studio aber er beachtet die Parameter nicht.