Also ich würde mal sagen, das du mit normalen C befehlern da überhaupt nicht weiterkommen wirst. Da brauchst du wohl oder übel die WinAPI für. Es gibt nämlich unter Windows nicht nur das Datenträgerverwaltungssystem über die Laufwerksbuchstaben, sondern zusätzlich noch über einen PIDL Baum. Hier hat jedes Objekt eine im zugewiesene PIDL Nummer. Zum arbeiten mit dieser Struktur gibts irgendwie direkt Windows Shell befehle. z.B. das IShellFolder Objekt, SHGetDesktopFolder, SHBindToParentEx... Leider kenne ich mich mit der API im allgemeinen auch überhaupt nicht aus. Aber danach könntest du vielleicht mal im Inet suchn oder etwas dazu fragen.
Ich kenne keine Lösung, die bei allen Betriebssystemen funktioniert. Bei X86-Systemen könntest du höchstens noch mit Assembler und Interrupts arbeiten (wenn das überhaupt unterstützt wird; aber trotzdem umständlich).
Für Linux hat schon mal jemand eine Lösung gepostet bzw. eine Version von kbhit() unter Linux.
Dass der Dev-cpp das nicht kann, wundert mich nicht.
AJ schrieb:
SideWinder schrieb:
Manche Leute wollens einfach nicht lernen
MfG SideWinder
Ja und dann genau die Leute, die noch hoch hinaus wollen.
*g*, stell dir vor du benützt für dein neues OS system("pause") und implementierst zwar system() aber vergisst auf pause...
MfG SideWinder
Frusciante schrieb:
Das von Style3x interesseirt mich, sieht schön einfach aus. Aber wie genau funzt das? Wie benutze ich die Farben dann? z.b. in einem cout befehl?
Argh ich liebe Leute die so einen Mist posten wie Style3x - auch wenn sie meistens gar nichts dafür können :(:)
Es ist auf jeden Fall der falsche Weg!
MfG SideWinder
Ausgabe formatieren? Meinst du bloß mit Abständen, etc. dann ist vielleicht für dich eine Kombination aus gotoxy() (siehe FAQ Improved Console), clrscr() (siehe FAQ Improved Console) und cout/printf() (je nach Programmiersprache) nützlich.
MfG SideWinder
Probiers mal mit einer selbstdefinierten Zahl, z. B. einmal mit 2,6 und ein anderes mal mit 2,4. Da sollte es richtig gerundet werden.
Bei MB oder GB Angaben sind manchmal Unterschiede in unterschiedlichen Programmen. Das hängt davon ab, wie die Angaben aus den Bytes berechnet werden.
Ohne Positionierung wird das nicht so einfach im Textmodus funktionieren. Du brauchst auch nicht für jedes Zeichen den Cursor neu positionieren. Schließlich rückt der ja immer um eins nach rechts, von ganz allein ;).
Eine andere Möglichkeit wär noch in einen Grafikmodus zu wechseln, da würde es dann Funktionen geben, mit denen du z. b. diesen roten Kasten zeichnen kannst und dann natürlich mit der gleichen Funktion auch wieder mit der Hintergrundfarbe überzeichnen (dass er sozusagen wieder weg ist).
Es heißt auch nicht vor raus sondern voraus.
Das erste mit dem Smily war eigentlich ein Jux (funktioniert aber trotzdem :p ; Konsolenfenster links oben anklicken, dann auf Eigenschaften, auf Register Layout wechseln und bei Fensterpuffergröße die Höhe auf 25 ändern).
Ansonsten schau dir meinen zweiten Teil an. Da gibts höchstens eine Möglichkeit mit WinAPI. Also erstmal die FAQ vom WinAPI-Forum durchsuchen und bei Erfolglosigkeit direkt im WinAPI-Forum fragen (am besten mit der Angabe, dass man in der FAQ nicht fündig wurde und auch im Konsolenforum nichts zu finden war ;)).
Aja möglicherweise steht was in der Improved Console. Die kannst du dir in der Konsolen-FAQ anschauen (basiert auch auf WinAPI-Funktionen).
Ich möchte ein Programm machen, welches zeilenweisse aus der Datei dw.dat ausliesst und danach zufällig
10 Zeilen davon in die Datei dwa.tmp schreibt. Ich hab dazu folgenden Code geschrieben:
struct words
{
char Puffer[31];
words *next;
};
words *first = NULL;
words *words_ptr;
int z = 0;
char puffer[30];
FILE *f;
f = fopen("dw.dat","r");
while(fgets(puffer,sizeof(puffer),f) != 0)
{
if (first == 0)
{
first = (words *) malloc(sizeof(words));
lstrcpy(first->Puffer,puffer);
first->next = NULL;
}
else
{
words_ptr = first;
while(words_ptr->next != 0)
words_ptr = words_ptr->next;
words_ptr->next=(words*) malloc(sizeof(words));
words_ptr = words_ptr->next;
lstrcpy(words_ptr->Puffer,puffer);
words_ptr->next = NULL;
}
z++;
}
fclose(f);
randomize();
f = fopen("dWa.tmp","w");
for(int x =10; x > 0; --x)
{
words_ptr = first;
int i = random(z);
for(i; i>0; --i)
{
words_ptr = words_ptr->next;
}
fputs(words_ptr->Puffer,f);
}
fclose(f);
Das Problem dabei ist, dass ja auch zweimal die selbe Zeile in die Datei dwa.tmp geschrieben werden kann, dies will ich aber nicht. Nun dachte ich mir, das man nachdem man in die Datei dwa.tmp geschrieben hat, die Struktur welche den String enthaltet löschen kann. Da es sich ja aber um verkettet Listen handelt, kann man ja die entsprechende Struktur nicht einfach löschen, sondern man müsste sie sozusagen der Liste aushenken. Kann jemand den Code so ergänzen? (Ich konte es nicht) Im Voraus besten Dank!!