Archiv verlassen und diese Seite im Standarddesign anzeigen : switch in schleifen umwandeln
kann das jemand mit schleifen machen?
eigentlich sollte mann ja nur die cas: erstzen durch if schleifen , aber das klappt bei mir nicht so.
#include <stdio.h>
int main(int argc, char *argv[]) {
FILE* quelldatei;
FILE* zieldatei;
int c;
switch(argc) {
long filepos;
case 2:
printf("1 Argument angegeben\n");
if((quelldatei=fopen(argv[1],"r")) == NULL){
printf("Konnte %s nicht oeffnen\n",quelldatei);
} // if
else {
printf("Datei %s wurde geoeffnet\n",quelldatei);
} // else
fseek(quelldatei, 0L, SEEK_END);
filepos = ftell(quelldatei);
while (filepos >= 0) {
fseek(quelldatei, filepos, SEEK_SET);
putc(getc(quelldatei), stdout);
filepos -= 1;
} // while
break;
case 3:
printf("2 Argumente angegeben\n");
quelldatei=fopen(argv[1],"r");
if(quelldatei==NULL) {
printf("Konnte Quelldatei %s nicht öffnen!\n",argv[1]);
} // if
if(quelldatei!=NULL) {
printf("Quelldatei: %s wurde geoeffnet\n",argv[1]);
} // if
zieldatei=fopen(argv[2],"w");
if(zieldatei==NULL) {
printf("Konnte Zieldatei %s nicht öffnen!\n",argv[2]);
} // if
if(zieldatei!=NULL) {
printf("Zieldatei: %s wurde geoeffnet\n",argv[2]);
} // if
fseek(quelldatei, 0L, SEEK_END);
filepos = ftell(quelldatei);
while (filepos >= 0) {
fseek(quelldatei, filepos, SEEK_SET);
putc(getc(quelldatei), zieldatei);
filepos -= 1;
} // while
printf("\nInhalt der Quelldatei wurde in die Zieldatei geschrieben\n");
break;
default:
printf("Fehler!!! Kein Argument angegeben\n");
printf("Weiter mit Enter-Taste\n");
fclose(quelldatei);
fclose(zieldatei);
getchar();
break;
} // switch
}
es ist nicht php code sondern c.
hab nur nicht gewusst ob UBB-Code für C Code hier geht
Moin,
wo ist das Problem?
switch (argc){
case 2: ...
case 3: ...
default ...
}
Sollte mit
if (argc == 2) ...
if (argc == 3) ...
if (argc != 2 && argc!=3) ...
machbar sein. Aber warum willst du das so haben? Mit dem switch halte ich es für deutlich eleganter... :confused:
weil ich nen blöden Lehrmeiser habe
oh oh oh du musst noch bischen lernen. logisch das bei dir beide case in die hose gehen. probiers mal so:
#include <stdio.h>
int main(int argc, char *argv[]) {
FILE* quelldatei;
FILE* zieldatei;
int c;
switch(argc) {
long filepos;
case 2:
printf("1 Argument angegeben\n");
if((quelldatei=fopen(argv[1],"r")) == NULL){
printf("Konnte %s nicht oeffnen\n",quelldatei);
} // if
else {
printf("Datei %s wurde geoeffnet\n",quelldatei);
fseek(quelldatei, 0L, SEEK_END);
filepos = ftell(quelldatei);
while (filepos >= 0) {
fseek(quelldatei, filepos, SEEK_SET);
putc(getc(quelldatei), stdout);
filepos -= 1;
} // while
fclose(quelldatei);
} // else
break;
case 3:
printf("2 Argumente angegeben\n");
quelldatei=fopen(argv[1],"r");
if(quelldatei==NULL) {
printf("Konnte Quelldatei %s nicht öffnen!\n",argv[1]);
} // if
else{
printf("Quelldatei: %s wurde geoeffnet\n",argv[1]);
zieldatei=fopen(argv[2],"w");
if(zieldatei==NULL) {
printf("Konnte Zieldatei %s nicht öffnen!\n",argv[2]);
} // if
else{
printf("Zieldatei: %s wurde geoeffnet\n",argv[2]);
fseek(quelldatei, 0L, SEEK_END);
filepos = ftell(quelldatei);
while (filepos >= 0) {
fseek(quelldatei, filepos, SEEK_SET);
putc(getc(quelldatei), zieldatei);
filepos -= 1;
} // while
fclose(quelldatei);
fclose(zieldatei);
}//else
}//else
printf("\nInhalt der Quelldatei wurde in die Zieldatei geschrieben\n");
break;
default:
printf("Fehler!!! Kein Argument angegeben\n");
printf("Weiter mit Enter-Taste\n");
//sinnloses schließen da sie eh nicht offen waren.
//fclose(quelldatei);
//fclose(zieldatei);
//getchar();
break;
} // switch
}
du musst deine if's nur ordentlich schachteln und aufpassen wo du was schließt.
gruß.
das mit den cases hat ja geklappt.
und mit de ifs auch.
hatte ne schleife zuviel bei mir
hä?? also bei deinem obigen code kann es nicht geklappt haben. wenn er nämlich die datei nicht findet, gibt er zwar die ausschrift, geht dann aber trotzdem zur while schleife. du hast nämlich dort deine if's viel zu schnell geschlossen. probiers aus. er wird mit dem code crashen.
nu weiss ich auch was du wolltest, aber die lösung dazu hat ja kehj schon geschrieben.
gruß.
das mit den Caces klappt bei mir Prima
Ich muß auch ehrlich sagen, daß ich den Code nur überflogen habe.
Zu Bugs kann ich nichts sagen. Generell würde ich da auch anders Modularisieren...
Egal, bei wem lernst du denn? Meine Abnehmer hätten mir so'ne if-Krücke um die Ohren gehauen ;)
Trotzdem noch viel Spaß!
P.S.: auf den 2. Blick muß ich auch sagen, daß du die if-Anweisungen zu früh zumachst. Hast du mal versucht, eine Datei anzugeben, die nicht existiert? Dann sollte das Programm gehörig crashen... (Das Dumme an C ist ja nur, daß es manchmal trotzdem funktioniert... :(
anda_skoa
24-01-2002, 11:32
Wenn du das switch(argc) durch ifs ersetzten willst, geht das so:
if (argc==2)
{
}
else if (argc==3)
{
}
else
{
}
Außerdem heißtes nicht if Schleife ;)
Eine Schleife wiederholt sich im Normalfall ja.
If ist eine Verzweigung, eine bedingte Verzweigung.
Ciao,
_
Hi,
also am Programmierstil ist wirklich noch einiges zu pfeilen.
Ich hätte ganz am Anfang eine oder auch zwei kleine if Anweisungen genommen, ala:
if (argc > 1) {
... öffne quelldatei
} // if (argc > 1)
else {
.. zeige Fehlermeldung, z.B. auch für die richtige Bedienung des Programms.
exit (-1);
} // if (argc > 1)
if (argc == 3) {
... öffne zieldatei
} // if (argc == 3)
else
zieldatei = stdout;
.... mache alles was du willst
Denn die eine große switch-Anweisung für das bisseril Krimskrams macht das ganze ganz schön unubersichtlich, z.B. zwei mal wird die die Quelldatei geöffnet, zweimal ist der Code fürs einlesen da. Ich glaube das ist der Programmierstil von Bill's Leuten, Hauptsache viel Speicherplatz verbrauchen, auch wenn's nicht notwendig ist.
Gruß
-= Pingu =-
PS: Eine provokante Frage: Läßt Du eigentlich alles von uns machen, oder überlegst Du Dir auch was selber. Denn ich denke du sollst die Programmierung lernen? Aber hier im Forum kann ich die gesamte Programmentwicklung verfolgen: File Zeilenweise auslesen (http://www.linuxforen.de/forums/showthread.php?s=&threadid=22786)
nö aber ich hab in der Firma niemanden der mir Hilft.
Wir sind ne 3 mann Firma und sehr unter Zeit druck.
Und PS. ich lerne viel schneller wenn ich ein fertiges Programm mit erklärung bekomme
@Pingu
dein p.s. spricht mir aus der sele. wollte diese frage auch schon stellen, wollt aber nicht unhöfflich sein.
Original geschrieben von Debuger
Und PS. ich lerne viel schneller wenn ich ein fertiges Programm mit erklärung bekomme
wenn du meinst, ich kanns mir net so vorstellen, wenn ich selber was rausfinde lern ich a viel besser und b ich behalte es auch für später.
so gehts mir,aber zum glück sind nicht alle gleich.
übrigens rätsel ich immer noch warum dein prog bei einer nicht existierenden datei nicht crasht. zum glück ist kehj derselben meinung wie ich.
gruß.
bei mir gehts zulange bis ich was heraus finde.
php hab ich auch durch fertige Scripts gelernt
aha, wenn du php kannst, wieso machst du dann in c deine if's zu schnell zu?? soll kein angriff an deine programmierfähigkeiten sein, aber ich frage mich ob du das in php auch so machst??
wenn ja müssten auch dort deine progs crashen oder du testest nicht genug. den fehler sieht jeder beim hinschauen. das ist mir nur ein rätsel. glaub mir, arbeite ein tutorial durch und du verstehst das programmieren langsam von grund auf. egal welche sprache. wenn du das kannst, dann ist es leicht eine andere sprache zu verstehen. man muss aber die grundlagen verstehen und beherschen lernen.
dies ist nur ein tip am rande.
gruß.
eigentlich kalppen alle php's von mir.
Wie soll ich ein Tutorial durchgehen wenn ich vom Lehrmeister Aufgaben bekommen die ich machen muss?
Hab halt nen Arsch als Lehrmeister
hmm ganz einfach, setz dich zu hause hin. ist doch einfach oder??
ich mach das nur so und es gibt glaub ich viele andere die das auch so fabrizieren.
gruß.
wenn du den ganzen Tag nur c machst und de Lehrmeister noch Druck macht, hab ich am abend echt keine Lust C zu lernen
hast du schon mal dran gedacht dich mit dem lehrmeister zu unterhalten?? das es so nicht geht und so?? vielleicht hilft es.
gruß.
also es ist so:
ich hatte zuerst ne Lehre als Systeminformatiker begonnen.
Nach inem halben Jahr wechselte ich die Lehre und mache seither Applikationsentwickler.
Im ersten halben Jahr hatten die anderen C und ich nicht.
Im Sommer habe ich ne Teil-LAP und muss c können.
deshalb muss ich jetzt so schnell wie möglich viel c lernen.
Und da wir ne kleine Firma sind und im Moment zeitdruck haben hat der Lehrmeister keine Zeit mir Sachen zu eklären darum schreibe ich hier so viel.
Und ich lernen nun mal schneller aus fertigen Scripts.
Original geschrieben von Sellew
übrigens rätsel ich immer noch warum dein prog bei einer nicht existierenden datei nicht crasht. zum glück ist kehj derselben meinung wie ich.
Ich kann sagen, daß es bei mir mit einem Speicherzugriffsfehler abschmiert. (wenn die Quelldatei nicht existiert)
Aber nochwas anderes: stellst du beim Kompilieren eigentlich die Warnungen ein?
Das mag ja sehr kleinkarriert klingen, aber da kommen doch 'ne Menge raus...
Zum Beispiel gibst du nichts am Ende von main() zurück... Habt ihr keine Programmierregeln in der Firma? Oder ist sowas allgemein nicht üblich?
Ich programmiere nun noch an der Uni, da ist der -Wall Schalter Pflicht.
Macht man das im "richtigen Leben" nicht mehr, hauptsache es läuft irgendwie?
Hast du mal im Netz nach Online-C-Kursen gesucht?
ich bekomme keine Meldungen.
Ich code mit dem C++ von Bloodshed
@kehj
der speicherzugriffsfehler ist ja auch absolut berechtigt.
und zu dienem -wall sag ich nur, manche sind kleinkarriert und manchen ist es halt rille, hauptsache es funzt. ich gehöre aber zu den kleinkarrierten.
gruß.
Bei uns in der Schule ist
gcc -Wall -ansi -pedantic angesagt
Bei einer Übungen (die auch in C programmiert wurde) hab ich nur //.. Kommentare geschrieben und bei der Abnahme festgestellt, daß das ca. 2 Seiten Warnings gab :eek:
Das war ein Schock :D Aber der Prüfer hat's locker genommen
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.