genstian Skrevet 20. november 2004 Del Skrevet 20. november 2004 hei jeg er litt lei koden funker ikke tråder så jeg starter en hjelp-med-og-få-koden-til-og-virke-tråd post koden som ikke virker her så kansje du får hjelp Lenke til kommentar
John Keats Skrevet 23. november 2004 Del Skrevet 23. november 2004 #include <windows.h> void clearScreen() { HANDLE consoleHandle = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_SCREEN_BUFFER_INFO csbi; if(GetConsoleScreenBufferInfo(consoleHandle, &csbi)) return; DWORD dwConSize = csbi.dwSize.X * csbi.dwSize.Y; DWORD cCharsWritten; COORD coordScreen = { 0, 0 }; if(!FillConsoleOutputCharacter(consoleHandle, (TCHAR) ' ', dwConSize, coordScreen, &cCharsWritten)) return; if(!GetConsoleScreenBufferInfo(consoleHandle, &csbi)) return; if(!FillConsoleOutputAttribute(consoleHandle, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten)) return; SetConsoleCursorPosition(consoleHandle, coordScreen); } Hva er galt med denne?? Lenke til kommentar
oelbox Skrevet 26. november 2004 Del Skrevet 26. november 2004 Tja det første som slår meg er at du har skrevet: if(GetConsoleScreenBufferInfo(consoleHandle, &csbi)) men dette skal vel strengt tatt i ditt eksempel være: if(!GetConsoleScreenBufferInfo(consoleHandle, &csbi)) Ellers returnerer funksjonen din når GetConsoleScreenBufferInfo returnerer TRUE... Lenke til kommentar
TeddyErt Skrevet 3. desember 2004 Del Skrevet 3. desember 2004 main() { FILE *f; char tab[40]; int num; f=fopen("fil.txt","r"); fscanf(f,"%s:%*:%*:%d:%*",&tab,&num); printf("%s %d \n",tab,num); } samme som jeg har forklart tidligere. Fil.txt inneholder felter som er skilt med : skal ha det første feltet som en string og det nest siste som et nummer. Nummeret fungerer, men stringen blir hele linjen og ikke bare det feltet jeg vil ha. Lenke til kommentar
GeirGrusom Skrevet 4. desember 2004 Del Skrevet 4. desember 2004 Jeg tror du burde bytte ut : med et annet tegn, du kan jo f.eks. sette stringen i parantes eller "'" eller noe... Lenke til kommentar
GeirGrusom Skrevet 4. desember 2004 Del Skrevet 4. desember 2004 (endret) Jeg har laget en terreng klasse, som er ganske komplisert nå, og så har det dukket opp et problem, på pterrain::displace(word *map, int width, int height) Denne funksjonene bruker den én-dimensjonale arrayen map til å lage høydeforskjeller på en fire-dimensjonal array av vertex3<float> og jeg mistenker at det er i funksjonen som gjør om 4-dimensjoner til 1 dword pterrain::ToIndex(dword super_x, dword super_y, dword x, dword y) { unsigned int cells = this->m_rows * this->m_cols; return (super_y * this->m_super_cols * cells) + (super_x * cells) + (y * this->m_cols + x); } Kan noen se om det er noen feil her? Endret 4. desember 2004 av GeirGrusom Lenke til kommentar
iobas Skrevet 4. desember 2004 Del Skrevet 4. desember 2004 Jeg har laget en terreng klasse, som er ganske komplisert nå, og så har det dukket opp et problem, på pterrain::displace(word *map, int width, int height) Denne funksjonene bruker den én-dimensjonale arrayen map til å lage høydeforskjeller på en fire-dimensjonal array av vertex3<float> og jeg mistenker at det er i funksjonen som gjør om 4-dimensjoner til 1 dword pterrain::ToIndex(dword super_x, dword super_y, dword x, dword y) { unsigned int cells = this->m_rows * this->m_cols; return (super_y * this->m_super_cols * cells) + (super_x * cells) + (y * this->m_cols + x); } Kan noen se om det er noen feil her? hva er det som evt ikke funker med den koden? og hva er det den koden skal gjøre? toindex... er det meningen at den tar et punkt i den 4d arrayen og skal returnere en index til 1d arrayen? eller returnerer den lengden på en 4d array eller hva? hva er forresten super_y og super_x? når jeg tenker 4d så tenker jeg x, y, z, w jeg da.. men det er kanskje ikke sånn 4d det er snakk om? Lenke til kommentar
GeirGrusom Skrevet 4. desember 2004 Del Skrevet 4. desember 2004 (endret) Som jeg sa, den gjør om 4d til 1d, jeg bruker den som en referanse i en 1d array av words (16b) for å lage høydeforskjeller (displace) 4d er hvordan arrayet teoretisk ser ut vertex3<float> *m_vertex_buffer; er teoretisk bygd slik: vertex3<float> m_vertex_buffer[super_cols, super_rows][columns, rows] Dette er for å rendre deler av terrenget, men ikke hele. Funksjonen pterrain::displace går igjennom hver vertex i terrenget, og henter en verdi ut av *map, ved å bruke pterrain::ToIndex() Jeg har plundret litt med dette, fordi hvert polygon ikke kan dele vertexer, så den er litt kranglete... kanskje noen har en bedre måte å lage det på? bool pterrain::CreateBuffer(dword super_rows, dword super_cols, dword rows, dword cols, float cellwidth, float cellheight) { unsigned int sx, sy, x, y; word z; float mx, my; float mcx, mcy; this->CreateBuffer(rows * super_rows * cols * super_cols * 4, rows * cols * 4); mesh_lpvertex mv = this->m_vertex_buffer; terrain_lptriangle mt = this->m_triangle_buffer; this->m_cell_height = cellheight; this->m_cell_width = cellwidth; this->m_cols = cols; this->m_rows = rows; this->m_super_cols = super_cols; this->m_super_rows = super_rows; unsigned int cluster_size = 0; my = 0; mcy = 0; z = 0; mcx = 0; for(sy=0;sy<super_rows;sy++) { for(sx=0;sx<super_cols;sx++) { my = mcy; for(y=0;y<rows;y++) { mx = mcx; for(x=0;x<cols;x++, mv++) { mv->vert = vertex(mx, 0, my); mv->texc = texcoord(0, 0); mv++; mv->vert = vertex(mx + cellwidth, 0, my); mv->texc = texcoord(1.0f, 0); mv++; mv->vert = vertex(mx + cellwidth, 0, my + cellheight); mv->texc = texcoord(1.0f, 1.0f); mv++; mv->vert = vertex(mx, 0, my + cellheight); mv->texc = texcoord(0, 1.0f); mx += cellwidth; cluster_size += (sizeof(mesh_vertex) * 4); } my += cellheight; } mcx += cellwidth * cols; } mcy += cellheight * rows; mcx = 0; } for(y=0;y<rows;y++) { for(x=0;x<cols;x++) { mt->a = z; mt->b = z + 3; mt->c = z + 2; mt++; mt->a = z; mt->b = z + 2; mt->c = z + 1; mt++; z+=4; } } return true; } void pterrain::Displace(word *map, float magnitude) { mesh_lpvertex mv = this->m_vertex_buffer; float new_val; unsigned int sx, sy, x, y; for(sy=0;sy<this->m_super_rows;sy++) { for(sx=0;sx<this->m_super_cols;sx++) { for(y=0;y<this->m_rows;y++) { for(x=0;x<this->m_cols;x++) { new_val = ((float)map[this->ToIndex(sx, sy, x, y)] / 65536.f) * magnitude; mv->vert.y = new_val; mv++; new_val = ((float)map[this->ToIndex(sx, sy, x + 1, y)] / 65536.f) * magnitude; mv->vert.y = new_val; mv++; new_val = ((float)map[this->ToIndex(sx, sy, x + 1, y + 1)] / 65536.f) * magnitude; mv->vert.y = new_val; mv++; new_val = ((float)map[this->ToIndex(sx, sy, x, y + 1)] / 65536.f) * magnitude; mv->vert.y = new_val; mv++; } } } } } Endret 4. desember 2004 av GeirGrusom Lenke til kommentar
iobas Skrevet 4. desember 2004 Del Skrevet 4. desember 2004 (endret) du sier fortsatt ikke hva som er feil med koden da. btw, de siste 4 nestede loopene ser litt rart ut. er du sikker på at du ikke bare kan ha en loop og bare bruke map? blir ikke det samme resultat? da slipper du hele toindex-saken Endret 4. desember 2004 av iobas Lenke til kommentar
GeirGrusom Skrevet 5. desember 2004 Del Skrevet 5. desember 2004 Nei, det er det som er problemet, jeg vet ikke hva som er feil, det fungerer... rart, jeg har laget et displacement map i adobe photoshop som jeg bruker, og jeg får et merkelig resultat, som gjentar seg Lenke til kommentar
GeirGrusom Skrevet 6. desember 2004 Del Skrevet 6. desember 2004 Det er ikke så viktig, jeg hadde en grunnleggende feil i pterrain::Displace, takk for all hjelp, iobas Lenke til kommentar
Dead_Rabbit Skrevet 6. desember 2004 Del Skrevet 6. desember 2004 (endret) Har en liten kode her som jeg ikke helt får til å funke. Har søkt litt her og der og rundt på forumet men... Her kommer ihvertfall koden: //Minimal File System /*********************************************** * Program: Minimal File System * * Purpose: * * Date: 05.12.04(My name day) * * Last time modifided * * ********************************************* */ #include <iostream> #include <vector> #include <map> using namespace std; bool execute(string); enum command { open, save, create, xit, del }; int main() { cout << "Minimal File System - MFSys" << endl; string input; while(1) { while(getline(cin, input) && execute(input)) ; cerr << "No such command!"; } } bool execute(string s) { switch(/*Help!*/) { case del: cout << "Del!"; break; case open: cout << "Open!"; break; case save: cout << "Save!"; break; case xit: cout << "Exit!"; break; case create: cout << "Create!"; break; } return 1; } Problemet er egentlig at jeg ikke helt vet hvordan jeg skal få "gjort" om en enum så jeg kan sammenlikne med en string. Har sett noen eksempler med map som hverken funker eller som jeg skjønner. Noen som kan hjelpe? (har stressa med dette i... ) Endret 9. oktober 2005 av zirener Lenke til kommentar
søppel Skrevet 6. desember 2004 Del Skrevet 6. desember 2004 (endret) #include <iostream> #include <map> using namespace std; int main() { enum { velkommen, hade }; map<string, unsigned int> assoc; assoc["velkommen"] = velkommen; assoc["hade"] = hade; string input = "hade"; switch(assoc[input]) { case velkommen: cout << "velkommen" << endl; break; case hade: cout << "hade" << endl; break; } return(0); }//main husk at operator[] er et funksjonskall .. så om hastighet er viktig for deg ..... (men ikke tenk på sånnt tidlig i et prosjekt .. bare abstraher/gjemm det vekk i en funksjon/klasse/modul og legg til en TODO) Endret 6. desember 2004 av søppel Lenke til kommentar
genstian Skrevet 7. desember 2004 Forfatter Del Skrevet 7. desember 2004 når jeg kopierer den inn får jeg c:\Documents and Settings\si\Mine dokumenter\Visual Studio Projects\89\89.cpp(28): fatal error C1010: unexpected end of file while looking for precompiled header directive Lenke til kommentar
søppel Skrevet 7. desember 2004 Del Skrevet 7. desember 2004 (endret) Slå opp i manualen til kompileren din. Edit: Er lite interessert i å surre med MS-spesifikke problemer; kan hende noen andre her kan hjelpe deg. Edit2: zirener: np :] Endret 7. desember 2004 av søppel Lenke til kommentar
Dead_Rabbit Skrevet 7. desember 2004 Del Skrevet 7. desember 2004 Takk for hjelpen! Det funker nå! Lenke til kommentar
anderlin Skrevet 7. desember 2004 Del Skrevet 7. desember 2004 (endret) Et veldig elementært problem... Føgende virker ikke: test.c: #include <stdio.h> #include "testlib.h" int main() { int a = 2; int b = 3; int svar = summer (a, b); printf("Svaret er %d ", svar); return 0; } testlib.h #ifndef testlib_h #define testlib_h int summer (int a, int b); #endif testlib.c int summer (int a, int b) { int svar = a + b; return svar; } int main() { return 1; } Og når jeg skal kompilere: # gcc test.c -o test /tmp/ccaeK8Ly.o(.text+0x1d): In function `main': : undefined reference to `summer' collect2: ld returned 1 exit status Er det noe jeg ikke har forstått med header-filer? Takknemlig for hjelp i starten, det er mye med C som forvirrer meg... Skjønner heller ikke hvorfor dette skjer når jeg tar vekk main-metoden fra testlib.c: # gcc testlib.c -o testlib /usr/lib/gcc/x86_64-pc-linux-gnu/3.4.3/../../../../lib/crt1.o(.text+0x21): In function `_start': : undefined reference to `main' collect2: ld returned 1 exit status Endret 7. desember 2004 av anderlin Lenke til kommentar
Dead_Rabbit Skrevet 7. desember 2004 Del Skrevet 7. desember 2004 Blir det ikke nå to funksjoner som heter main()? Den i testlib.c og den i test.c? Tror du skal fjerne den i testlib.c Lenke til kommentar
anderlin Skrevet 7. desember 2004 Del Skrevet 7. desember 2004 Jeg synes også det, men da ville ikke testlib kompilere (se nederst i innlegget mitt). Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå