-
Gesamte Inhalte
9912 -
Benutzer seit
-
Letzter Besuch
-
Tagessiege
3
Inhaltstyp
Profile
Forum
Downloads
Kalender
Blogs
Shop
Alle Inhalte von Klotzkopp
-
Was heißt "noch"? Sicher brauchst du einen Zähler. Bei for-Schleifen brauchst du immer einen Zähler. Oder erwartest du wirklich, dass eingabe<=eingabe-1 jemals wahr wird?
-
So, jetzt mal mit Nachdenken. Es soll doch nur eine Zahl eingegeben werden, oder? Also darf cout & cin nicht in der Schleife stehen. Die Schleife soll von 2 bis eingabe-1 laufen. Das solltest du aber hinbekommen.
-
Kannst du. Ist aber sinnlos. eingabe % eingabe ist der Rest der Division einer Zahl durch sich selbst. Das ist immer 0. Das ist letztlich egal. Eine for-Schleife bietet sich an, wenn du in festen Schritten von einem Startwert zu einem vorher bekannten Endwert laufen musst. So wie hier. Mach doch erst die Schleife, lass den Modulo-Teil weg, und zeig, was du hast.
-
Nichtaufgelöste externe Symbole (war: Ich brauch da ma hilfäää :))
Klotzkopp antwortete auf ReadyForPaddy?'s Thema in C und C++
Implementieren heißt, dass du in den Code schreibst, was eine Funktion macht. Bisher steht in deinem Code nur, dass es die Funktionen Auswahl und Berechnung gibt, nicht, was sie tun. Wenn du das Programm aus einem Buch abgeschrieben hast, wird in dem Buch wahrscheinlich auch irgendwo eine Implementierung dieser beiden Funktionen stehen. Die musst du deinem Code hinzufügen. Wenn dir das zu kompliziert wird, solltest du ein paar Gänge zurückschalten, und dich mit einfacheren Programmen beschäftigen. Das ist doch sicher nicht das erste Beispiel in dem Buch, oder? -
Auslesen von Systemvairablen - getenv() verkürzt Pfade :(
Klotzkopp antwortete auf backdraft's Thema in C++: Compiler, IDEs, APIs
Die #include-Direktive für <windows.h> darf nicht in der Headerdatei stehen. Alternativ könntest du auch auf eine Headerdatei komplett verzichten, und dort, wo du sie brauchst, eine Deklaration deiner Funktion einfügen. -
Auslesen von Systemvairablen - getenv() verkürzt Pfade :(
Klotzkopp antwortete auf backdraft's Thema in C++: Compiler, IDEs, APIs
Du könntest versuchen, über die Reihenfolge der include-Direktiven etwas zu erreichen. Wenn das nicht hilft, dann pack die Funktion, die GetLongPathName benutzt, in eine eigene .cpp-Datei, die nur die wirklich benötigten Header benutzt. -
Auslesen von Systemvairablen - getenv() verkürzt Pfade :(
Klotzkopp antwortete auf backdraft's Thema in C++: Compiler, IDEs, APIs
windows.h oder Platform SDK? Dann hast du wohl UNICODE/_UNICODE definiert. const WCHAR* path = L"C:\\DOKUME~1\\user\\LOKALE~1\\"; WCHAR pathBuffer[MAX_PATH+1]; DWORD dwRet = GetLongPathName(path, pathBuffer, MAX_PATH); [/CODE] -
Das ein oder andere if wirst du auch brauchen. Formulieren wir doch erst mal den Algorithmus: Um festzustellen, ob eine Zahl eine Primzahl ist, musst du sicherstellen, dass sie nur durch sich selbst und durch eins teilbar ist. Wenn also eine Zahl durch irgendeine Zahl >1 und <Zahl teilbar ist, ist sie keine Primzahl. Wir prüfen also alle Zahlen von 2 bis (Zahl-1) und testen, ob Zahl dadurch teilbar ist. Falls ja, ist die Zahl keine Primzahl, und wir sind fertig. Falls nicht, machen wir mit der nächsten Zahl weiter. Haben wir alle Zahlen getestet, ohne eine gefunden zu haben, durch die die Zahl teilbar ist, ist die Zahl eine Primzahl. Einverstanden? Dann solltest du das jetzt in Code umsetzen, oder auch in einen PAP/Struktogramm, falls du den Zwischenschritt auch noch machen möchtest. Eine Anmerkung am Rande: Der Algorithmus ist nicht optimiert. Aber er tut, was er soll.
-
Nichtaufgelöste externe Symbole (war: Ich brauch da ma hilfäää :))
Klotzkopp antwortete auf ReadyForPaddy?'s Thema in C und C++
Hallo und Willkommen auf dem Board Ist dir klar, dass "Ich brauch da ma hilfäää" ein richtig schlechter Titel für einen Thread ist? Du bekommst schnellere und bessere Hilfe, wenn die potentiellen Helfer schon am Threadtitel sehen können, worum es geht. Es gibt Leute, die schreckt so ein Titel ab, so dass sie sich den Thread gar nicht ansehen. Außerdem verschlechtert es die Ergebnisse der Suchfunktion. Ich ändere das mal für dich. -
Auslesen von Systemvairablen - getenv() verkürzt Pfade :(
Klotzkopp antwortete auf backdraft's Thema in C++: Compiler, IDEs, APIs
#include <windows.h> hast du aber, oder? Hast du ein aktuelles Platform SDK drauf? -
Jetzt dämmert's. Leider kannst du durch das bloße Durchführen dieser Rechnung nicht bestimmen, ob eine Zahl eine Primzahl ist. Jede natürliche Zahl ist durch sich selbst und durch 1 teilbar, aber nur Primzahlen sind nicht durch andere Zahlen teilbar. Um die Teilbarkeit zu testen, brauchst du zuerst mal eine if-Abfrage: if(a % b == 0) { // a ist durch b teilbar }[/CODE] % (modulo) liefert den Rest der Division. Ist der Null, geht die Division glatt auf. Die Formulierung ""Die Zahl hat folgende Primzahlen: "" ist auch Unsinn. Eine Zahl hat keine Primzahlen. Sie ist eine oder sie ist keine. Sie hat [i]Primfaktoren[/i], aber um die bestimmen zu können, solltest du zuerst ein Programm schreiben, dass prüft, ob eine eingegebene Zahl eine Primzahl ist. Und um eine Schleife wirst du da nicht herum kommen.
-
Auslesen von Systemvairablen - getenv() verkürzt Pfade :(
Klotzkopp antwortete auf backdraft's Thema in C++: Compiler, IDEs, APIs
Mein Fehler: Es ist GetLongPathName, nicht GetFullPathName: const char* path = "C:\\DOKUME~1\\user\\LOKALE~1\\"; char pathBuffer[MAX_PATH+1]; DWORD dwRet = GetLongPathName(path, pathBuffer, MAX_PATH); [/CODE] Aber noch ein paar Tipps zu deinem Code: 1. In Literalen im Quellcode musst du immer doppelte Backslashes machen. 2. Mal abgesehen davon, dass du die Größe des Puffers, nicht die Länge des umzuwandelnden Pfades angeben müsstest: sizeof(path) ist 4 (auf 32Bit-Windows), falls path ist ein char* ist. Ist path eine Instanz einer Stringklasse, wird dabei auch nicht die Länge herauskommen. Mit sizeof kannst du nicht die Größe eines dynamisch allokierten Speicherbereichs bestimmen. Das geht überhaupt nicht in C++. 3. Der vierte Parameter von GetFullPathName (char**) ist ein "out"-Parameter, d.h. der Zeiger wird auf einen neuen Wert gesetzt. Damit ist der Speicher, den du für Adress mit new angefordert hast, verloren. -
Schreibst du es noch hier rein, falls jemand später dasselbe Problem hat?
-
Erstens steht bei einer Zuweisung das Ziel (also die Variable, in der der Wert abgelegt werden soll) auf der linken Seite. Also wenn überhaupt, dann zahl2 = zahl1 / zahl1; Zweitens: zahl1 / zahl1 ist 1, egal, welchen Wert zahl1 hat (außer Null, da ist es undefiniert). Auch hier: Das Ziel der Zuweisung muss links stehen. Und zahl2 geteilt durch 1 bleibt zahl2. Man könnte also zusammenfassen; zahl2 = 1; ausgabe = zahl2; // und damit ausgabe = 1;[/CODE] Das ist offensichtlich Unsinn. Deine Kommentare an den Zeilen helfen da auch nicht weiter, weil sie nur wiedergeben, was der Code [i]macht[/i]. Das wissen wir schon. Um dieses Problem zu lösen, müssen wir von dir wissen, was dieser Code [i]tun soll[/i]. Denn das sind offensichtlich zwei unterschiedliche Dinge. Erklär uns, [i]warum[/i] du gerade diese Rechenschritte machst, dann kommen wir der Lösung näher.
-
Auslesen von Systemvairablen - getenv() verkürzt Pfade :(
Klotzkopp antwortete auf backdraft's Thema in C++: Compiler, IDEs, APIs
GetFullPathName kann aus der 8.3-Schreibweise die lange machen. -
Da kann ich nur zustimmen. Es wäre gut, wenn Phade und sagt, was diese beiden Zeilen tun sollen.
-
Mit Sicherheit hat das jemand. Aber dein Auftrag lautet Schreiben, nicht Weiterverwenden. Denkst du nicht, derjenige, der dir diesen Auftrag gegeben hat, hat sich etwas dabei gedacht? Denkst du nicht, es ist für das Lernziel besser, wenn du es selbst machst? Würdest du deinem Lehrer sagen, dass du das Programm nicht selbst geschrieben hast, wenn du es hier bekommen würdest?
-
// jetzt sind wir aber schon arg eingeschränkt. Konsolenein- und -ausgabe ist nicht...
-
cin, cout und endl liegen im namespace std, d.h. du musst entweder std::cout usw. schreiben oder nach dem Einbinden von iostream eine using-Direktive setzen: using namespace std;
-
printf stammt noch von C. Es funktioniert zwar unter C++ auch, man sollte aber trotzdem besser die C++-Streams benutzen.
-
Die innere for-Schleife und das switch sind unnötig, du könntest das auch so machen: for(n = 0; n < iDatensaetze; n++) { wsprintf(sz_vid, "%d", n + 1); lvItem.iItem = n; lvItem.iSubItem = 0; lvItem.pszText = sz_vid; lIndex = ListView_InsertItem(hwnd_ListView, &lvItem); //ListView_SetItemText(hwnd_ListView, n, 0, sz_vid); ListView_SetItemText(hwnd_ListView, n, 1, dbD_ptr[n].szpid); ListView_SetItemText(hwnd_ListView, n, 2, dbD_ptr[n].szpName); ListView_SetItemText(hwnd_ListView, n, 3, dbD_ptr[n].szpFilmlength); // usw... [/CODE] SetItemText für die erste Spalte brauchst du nicht, den Text gibst du ja schon bei InsertItem an.
-
Durchsuch mal das Forum C++: Compiler, IDEs, APIs (denn da gehört die Frage hin, weil sie nichts mit Standard-C++ zu tun hat) nach Shell_NotifyIcon, da sollte sich etwas finden. Sobald die Suchfunktion wieder aktiviert ist.
-
MDI und SC_RESTORE (MFC/VC++6.0)
Klotzkopp antwortete auf TinTin's Thema in C++: Compiler, IDEs, APIs
OnActivate könnte klappen. -
Es ergibt keinen Sinn, cchTextMax zu verändern. Wenn dsh.pszName lange genug verfügbar ist, ja. Schlecht. Mit dem virtuellen ListControl sollte man nur arbeiten, wenn man einen guten Grund dafür hat, z.b. wenn man häufig Objekte am Anfang oder in der Mitte entfernt. Da muss ein nicht-virtuelles ListControl viel umkopieren, und das dauert. Gibt es einen Grund dafür? Wenn du die Daten erst dann einlesen würdest, wenn du sie einfügen kannst, bräuchtest du kein virtuelles ListControl und könntest auf das Array dbD_ptr komplett verzichten. Du kannst auch alles vorher einlesen und dafür dein Array benutzen, aber ein virtuelles ListControl brauchst du dann immer noch nicht.
-
Wenn du eine LVN_GETDISPINFO-Nachricht bekommst, steht in der LVITEM-Struktur schon ein Puffer für den Text bereit. Wie groß der ist, steht in item.cchTextMax. Wenn du mehr Platz brauchst, musst du selbst einen Puffer bereitstellen und item.pszText darauf zeigen lassen. Ich verstehe nicht, warum du beim Hinzufügen der Items überhaupt schon Texte hineinschreibst. Wenn du unbedingt ein virtuelles ListControl haben musst, dann wird es dich schon fragen, wenn es Texte braucht. Wie und wo stellst du eigentlich sicher, dass du schon genügend Einträge in dbD_ptr eingelesen hast? So steht's in der MSDN Library. Keine Ahnung, warum. Weder noch. Entfernt aus dem ListControl.