Forum: PC-Programmierung C++ Code-Bilder öffnen


von Basil (Gast)


Angehängte Dateien:

Lesenswert?

Guten Tag, ich habe aus langeweile bisschen was programmiert.

Nun  habe ich mir einen Ordner erstellt wo ich alles abgelegt habe 
(Visual Studio 08)

Ich will nur durch eine Einfache Programmierung zwischen 2 Bildern 
auswählen konnen:

Der Code schaut wie Folgt aus:

--------------------------------------------

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

int x;

void main()
{
  printf("\n\t\t***Patchprogramm***");
  printf("\n\n\n\t\t***Allgemeine Hinweise***");
  printf("\n\t\tDas Benutzen dieses Programmes basiert");
  printf("\n\t\tauf eigener Haftung!");

  printf("\n\t\t*** <Enter> zum Akzeptieren ***");
  fflush(stdin);
  getchar();

  system("cls");
  printf("\n\n\n\t\t***Auswahl***");
  printf("\n\t\t1: Lehrer");
  printf("\n\t\t2: Pflanze");

  printf("\n\n\t\t***Wählen sie aus 1 oder 2*** \n\n\t\t");
  scanf("%i",&x);
  printf("\n\n\t\t*** Ihre Auswahl :%i ***",x);

  if (x==1)
  {
    printf("\n\n\t\tdas lehrerbild wird geladen");
    system("D:/SystemTest/SystemTest/***.jpg");
    fflush(stdin);
    getchar();

  }
  else if (x==2)
  {
    printf("\n\n\t\tdas Pflanzenbild wird geladen");
    system("D:/SystemTest/SystemTest/***_pflänzlii.JPG");
    fflush(stdin);
    getchar();

  }
  else if (x>=3)
  {
    printf("\n\n\t\tkeine gültige Auswahl");
    fflush(stdin);
    getchar();
  }
  fflush(stdin);
  getchar();

--------------------------------------

Nun Die bilder sind abgelegt -> Siehe Anhang

-------------------------------------

Nun im Code habe ich den ganzen Pfad angegeben, nun wenn ich den code 
als .exe weitergebe, wird der Dateipfad abgeändert und die Bilder 
wernden nicht mehr geladen.

wie kann ich anstelle
system("D:/dateipfad/bild.jpg");
das bild öffnen?

ich habe gehört das geht mit
system(".../bild.jpg");

hat aber nicht funktioniert, was kann ich da machen?

also das das programm weis das sich das bild im gleichen ordner 
befindet...

mfg und danke

: Verschoben durch User
von Karl H. (kbuchegg)


Lesenswert?

Basil schrieb:

> also das das programm weis das sich das bild im gleichen ordner
> befindet...

Wenn du davon ausgehen kannst, dann lass den Pfad komplett weg.

    system("bild.jpg");


PS: eigentlich lädt den Programm ja das Bild gar nicht. Das du da eine 
Anzeige kriegst, hat mehr damit zu tun, dass du dem Commando-Interpreter 
von Windows mittels dem Aufruf von 'system()' den Auftrag gibst, 
irgendwas mit der angegebenen Datei zu machen. Und in deinem Fall lädt 
dann eben das System einen Bildbetrachter und weißt den wiederrum an, 
das ausgewählte Bild zu laden.

Ich wollte das nur klar stellen, damit es da keine Missverständnisse 
gibt. Damit das von dir so angestrebte überhaupt funktioniert, muss da 
einiges im System korrekt funktionieren. Damit, dass dein Programm ein 
Bild 'geladen' hätte, kann man da kaum mehr sprechen. Aber das ist im 
Moment noch ok, denn in deinem Programm ist die ganze Sache nicht mehr 
so einfach zu realisieren.

von Skalpell (Gast)


Lesenswert?

Was du brauchst ist eine Form mit einer Picturebox 8-)!
http://www.functionx.com/vcnet/controls/picturebox.htm
wird Dir vielleicht helfen, ansonsten schau erstmal ein paar der vielen 
Hello World Videos auf youtube!

von Rolf Magnus (Gast)


Lesenswert?

Übrigens ergibt das da keinen Sinn:

Basil schrieb:
> fflush(stdin);

Ich weiß nicht, was Visual Studio da macht, aber nach ISO C ist das 
Verhalten undefiniert.

von Basil (Gast)


Lesenswert?

Rolf Magnus schrieb:
> Übrigens ergibt das da keinen Sinn:
>
> Basil schrieb:
>> fflush(stdin);
>
> Ich weiß nicht, was Visual Studio da macht, aber nach ISO C ist das
> Verhalten undefiniert.


Das mach ich einfach automatisch vor jedem getchar(); noch ein 
fflush(stdin); reihauen =) sonst wird auf einmal etwas übersprungen

von fz (Gast)


Lesenswert?

\|||/
         (o o)
 ,~~~ooO~~(_)~~~~~~~~~,
 |       Please       |
 |   don't feed the   |
 |       TROLL!       |
 '~~~~~~~~~~~~~~ooO~~~'
        |__|__|
         || ||
        ooO Ooo

von Rolf Magnus (Gast)


Lesenswert?

Basil schrieb:
> Rolf Magnus schrieb:
>> Übrigens ergibt das da keinen Sinn:
>>
>> Basil schrieb:
>>> fflush(stdin);
>>
>> Ich weiß nicht, was Visual Studio da macht, aber nach ISO C ist das
>> Verhalten undefiniert.
>
>
> Das mach ich einfach automatisch vor jedem getchar(); noch ein
> fflush(stdin); reihauen =) sonst wird auf einmal etwas übersprungen

Wie gesagt: Nach ISO C ist das Verhalten undefiniert. Die Aufgabe von 
fflush() ist, den Inhalt des Puffers des Streams an sein Ziel zu senden, 
und das ist nur für Ausgabe-Streams sinnvoll, denn bei Eingabestreams 
ist das Ziel mein Programm, und dahin bekomme ich die Daten durch 
einfaches Lesen. Die Aufgabe ist nicht, wie du es offensichtlich 
erwartest, den Puffer-Inhalt zu verwerfen.

von Basil (Gast)


Lesenswert?

Wie oben im C-Code zu sehen ist , nehme ich an ihr habt gemerkt, das ich 
kein Professioneller Programmierer bin, ich kenne gelegentlich die 
Basis,

Nach unserem Lehrer und eigenen Erfahrungen:

Schreib ein programm das zum start die "Enter" taste verlangt, danach 
gib einen satz aus und warte nochmal auf ein Enter zum beenden.

gut ohne fflush:

void main()
{
getchar();
printf("satz");
getchar();
}

--> nach dem ersten Enter wird das programm beendet, weil das "Enter" 
gespeichert ist und das 2 getchar auch gleich ausgelöst wird bzw 
bestätigt.

so mit fflush:

void main()
{
getchar();
printf("satz");
fflush(stdin); //Resettet das bereits vorhandene Enter
getchar();
}


und es funktioniert!!



Zur Info

Ich programmiere mit:
Visualstudio 2008
-> Win32 Console Application
-->C++ File (.cpp)

Basils von C++
mfg

von Karl H. (kbuchegg)


Lesenswert?

Basil schrieb:

> und es funktioniert!!

Das ist noch lange kein Argument.
Nur weil die Hersteller der Libraries da teilweise etwas eingebaut 
haben, damit nicht so tolle Programmierer auch Programme schreiben 
können, heisst das noch lange nicht das es richtig ist. Denn beim 
nächsten Compiler auf den du stösst, kann alles wieder ganz anders sein.

Was du gemerkt hast ist, dass es eine gute Idee ist, auch mal Fehler 
abzufngen. Ja, auch bei getchar kann es zu Fehlersituationen kommen.

Wenn du vernünftige Eingaben verarbeiten willst, dann ist oft fgets die 
Funktion der Wahl.

von NoBo (Gast)


Lesenswert?

Hei Leute!
Ich bin jetzt durch Zufall mal auf die Seite hier gestoßen...
Das hier ist mal wieder ein Beispiel dafür was ein Forum NICHT sein 
sollte. Entweder ihr helft ihm, oder ihr lasst es halt einfach!

Auch wenn's schon länger her ist... hier für alle SCHÜLER, deren Lehrer 
fflush benutzt, weil ers einfach nicht besser weiß:

Was steht als letztes Zeichen im Buffer? ja genau: "\n" das 
new-line-symbol.
klar kannst du hier auch sehr elegant eine kleine Funktion definieren, 
die getchar nutzt!

void leeren(){while(getchar!="\n"){};
              };

in deiner main gibst du dann einfach immer leeren(); an und gut ists!
-->leeren(); holt so lange kram ausm Buffer, bis Schluss ist und tut 
nichts damit--> Buffer leer, keine Probleme!

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.