willbend Skrevet 17. september 2005 Del Skrevet 17. september 2005 Jeg tenkte å prøve å ta opp c++ winsock igjen, men møtte på problemer med en gang. Jeg leser fra denne http://old.bsrf.org.uk/tutorials/part1.html akkurat nå. Problemet er at jeg ikke greier å kompilere. Jeg laget et nytt prosjekt, og på linker options skrev jeg inn wsock32.lib og mpr.lib. Så prøvde jeg å kompilere dette. #include #include #include #define PORT 3550 /* Port that will be opened */ #define BACKLOG 1 /* Number of allowed connections */ struct sockaddr_in server; /* server's address information */ struct sockaddr_in client; /* client's address information */ int sin_size; WSADATA wsdata; SOCKET fd, fd2; DWORD wsock; LRESULT CALLBACK recall (HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = TEXT("Server"); HWND hwnd; MSG msg; WNDCLASS wndclass; wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = recall; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION); wndclass.hCursor = LoadCursor (NULL, IDC_ARROW); wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = "Server"; RegisterClass (&wndclass); hwnd = CreateWindow (szAppName, // Windows Class Name "Server", // Windows Caption WS_OVERLAPPEDWINDOW, // Windows Style CW_USEDEFAULT, // initial x position CW_USEDEFAULT, // initial y position 200, // initial x size 200, // initial y size 0, // parent window handle 0, // parent menu handle hInstance, // program instance handle 0); // creation parameters ShowWindow(hwnd, iCmdShow); while (GetMessage (&msg, NULL, 0, 0)) { DispatchMessage (&msg); } return 1; } LRESULT CALLBACK recall (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { if (message == WM_LBUTTONDOWN) { WSAStartup(0x0101,&wsdata); if ((fd = socket(AF_INET, SOCK_STREAM, 0)) == -1 ) /* calls socket() */ { MessageBox(0,"Socket Error","Error",0); return -1; } server.sin_family = AF_INET; server.sin_port = htons(PORT); /* Remember htons() from "Conversions" section? =) */ server.sin_addr.s_addr = INADDR_ANY; /* INADDR_ANY puts your IP address automatically */ if(bind(fd,(struct sockaddr*)&server,sizeof(struct sockaddr)) == -1) /* calls bind() */ { MessageBox(0,"Bind Error","Error",0); return -1; } if(listen(fd,BACKLOG) == -1) /* calls listen() */ { MessageBox(0,"Listen Error","Error",0); return -1; } while(1) { sin_size = sizeof(struct sockaddr_in); if ((fd2 = accept(fd,(struct sockaddr *)&client,&sin_size)) == -1) /* calls accept() */ { MessageBox(0,"Accept Error","Error",0); return -1; } MessageBox(0,"Client connected to server.","Connection",0); send(fd2,"Welcome to my server.\n",22,0); /* send to the client welcome message */ WSACleanup(); return -1; } } if (message == WM_DESTROY) PostQuitMessage(0); return DefWindowProc(hwnd, message, wParam, lParam); } Her #include #include #include antok jeg at det skulle være #include <winsock.h> #include <windows.h> #include <iostream> Men er ikke sikker. Feilen jeg får er C:\Documents and Settings\Compaq_Eier\Skrivebord\c++\winsock\Makefile.win [build Error] ["Prosjekt] Error 1 Lenke til kommentar
-kga- Skrevet 18. oktober 2005 Del Skrevet 18. oktober 2005 Lurer på noe. Skal finne feil i disse to snuttene char tekst[15]; strncpy(tekst, ”heisan”, 6); printf(”%s\n”, tekst); og if (strcmp(string1,string2)) printf(”The strings are equal\n”); Sliter litt med å finne det. Lenke til kommentar
Peter Skrevet 18. oktober 2005 Del Skrevet 18. oktober 2005 (endret) Problemet med den første tror jeg er at den ikke får en null-terminering, dvs at printf vil skrive ut garbage. 2 måter å løse det på: char tekst[15]; strncpy(tekst, "heisan", 6); tekst[6] = '\0'; printf("%s\n", tekst); eller char tekst[15]; memset(tekst, '\0', 15); strncpy(tekst, "heisan", 6); printf("%s\n", tekst; Viktigste er ihvertfall at du får inn en nullterminering så printf ikke skriver ut masse random tull. Oppgave 2: strcmp har 3 returverdier. Dersom den returnerer 0, så er strengene like, altså må du ha: if(!strcmp(string1,string2)) printf("The strings are equal\n"); Endret 18. oktober 2005 av Nazgul Lenke til kommentar
charlie di meola Skrevet 18. oktober 2005 Del Skrevet 18. oktober 2005 In the case where the length of src is less than that of n, the remainder of dest will be padded with nulls. lettere bare å strncpy(tekst, ”heisan”, 7); Lenke til kommentar
Peter Skrevet 18. oktober 2005 Del Skrevet 18. oktober 2005 In the case where the length of src is less than that of n, the remainder of dest will be padded with nulls. lettere bare å strncpy(tekst, ”heisan”, 7); 5024930[/snapback] Ja, sorry, leste litt feil ibeskrivelsen. Synes det var litt merkelig at den ikke kunne legge til nullterminering... Lenke til kommentar
-kga- Skrevet 19. oktober 2005 Del Skrevet 19. oktober 2005 Takker og buker for svara. Lenke til kommentar
swj Skrevet 20. oktober 2005 Del Skrevet 20. oktober 2005 Hei hei! Dette har sikkert vært spurt om før, men jeg finner ikke svar på det jeg lurer på likevel...... Jeg bruker dev c++ og har problemer med at når jeg velger kjør og kompiler, så lukker terminalvinduet seg etter koden er ferdig å kjøre.... Noen som vet hva jeg kan gjøre for å unngå det? mvh swj Lenke til kommentar
Peter Skrevet 20. oktober 2005 Del Skrevet 20. oktober 2005 legg til system("PAUSE"); eller std::cin.get(); før return 0; (slutten av main() funksjonen din) Den siste er foretrukket Lenke til kommentar
swj Skrevet 21. oktober 2005 Del Skrevet 21. oktober 2005 legg til system("PAUSE"); eller std::cin.get(); før return 0; (slutten av main() funksjonen din) Den siste er foretrukket 5036828[/snapback] Tusen takk!! Lenke til kommentar
-kga- Skrevet 23. oktober 2005 Del Skrevet 23. oktober 2005 (endret) Det er noe feil i min do-while sak trur jeg, muligens i if setnigna mi også.. Den vill ikke slutte når jeg trykker n. //--------------------------------------------------------------------------- #pragma hdrstop #include <stdio.h> //--------------------------------------------------------------------------- #pragma argsused int main(int argc, char* argv[]) { int elevAlder[10]; int i, j, m, sumAlder = 0; float gjAlder; char a, l; for ( i = 0; i <= 9; i++ ) { printf( "Alder elev nr. %d :", i + 1 ); scanf( "%d", &elevAlder[i] ); sumAlder = sumAlder + elevAlder[i]; } gjAlder = sumAlder / i; printf( "Snitt alder er %.2f", gjAlder ); printf( "\n\nVil du redigere på en alder? (J/N)" ); scanf( " %c", &a ); if ( ( a = 'j' ) || ( a = 'J' ) ) { do { printf( "\n\nTast elev nr 1-10 for og redigere" ); scanf( "%d", &m ); printf ( "Du valgte elev nr. %d\n", m ); printf ( "Tast inn ny alder" ); scanf( "%d", &elevAlder[m-1] ); printf( "Ny alder på elev nr. %d er %d\n", m, elevAlder[m-1] ); sumAlder = 0; for ( i = 0; i <= 9; i++ ) { sumAlder = sumAlder + elevAlder[i]; } gjAlder = 0; gjAlder = (float)sumAlder / i; printf( "Ny snitt alder er %.2f\n\n", gjAlder ); printf( "Vil du redigere mer? (J/N)" ); scanf( " %c", &l ); } while ( ( l= 'j' ) || ( l = 'J' ) ); } getchar();getchar(); return 0; } //--------------------------------------------------------------------------- Sikkert en eller annen tåpelig feil. Men jeg ser den ikke. EDIT: koden så litt rar ut noen steder grunnet den var litt brei. Endret 23. oktober 2005 av Lord-KGA Lenke til kommentar
hishadow Skrevet 23. oktober 2005 Del Skrevet 23. oktober 2005 (endret) Det er noe feil i min do-while sak trur jeg, muligens i if setnigna mi også.. Den vill ikke slutte når jeg trykker n.... Sikkert en eller annen tåpelig feil. Men jeg ser den ikke. EDIT: koden så litt rar ut noen steder grunnet den var litt brei. 5048005[/snapback] Du bruker l = 'j' .. du tilordner en variabel, ikke sammenligner. Bruk ==. Også .. hvis du i stedet skriver konstanter på venstre side av tester, 'j' == l, vil du kunne oppdager slike feil. Gjelder alle testene dine. Endret 23. oktober 2005 av hishadow Lenke til kommentar
-kga- Skrevet 23. oktober 2005 Del Skrevet 23. oktober 2005 Takker. Att jeg ikke så det med == er dårlig av meg. Har jo drivi med en del if fra før. Lenke til kommentar
Fjoggs Skrevet 13. november 2005 Del Skrevet 13. november 2005 (endret) I tilfelle det er flere dyslektikere der ute som sliter med å inkludere » #<iostream> Sjekk at det står iostream og ikke isostream. Har prøv å få til automatisk (LIBRARY_PATH, etc av standart biblioteket) inkluderingen i g++ i hele helgen hvor jeg tilslutt ga opp og benyttet: locate iostream(!) og fant følgende plasering: #include </usr/include/c++/4.0.3/backward/iostream.h> Selv ikke da oppdaget jeg a det skal være iostream og ikke isostream, ikke engang da google hjalp meg med skrivefeilen ringte det en bjelle. It is hard to be an dysleximan.... (fritt inspirert av en The julekalender) Jaja shit happens. Edit Nødvendigheten av denne posten kan diksuteres, men det er godt å få utløp for kodefrustrasjon. Ikke at det er en gyldig unskyldning..... Endret 13. november 2005 av Fjoggs Lenke til kommentar
Zethyr Skrevet 26. november 2005 Del Skrevet 26. november 2005 Hvordan utfører jeg en NOT på en integer i c++ ? og hvordan bestemmer jeg hvor stor integeren må være, så jeg får med riktig antall tegn i resultatet? F.eks. dersom jeg har 0x00004cf6 så skal resultatet bli 0xffffb409 .. Jeg har også her prøvd diverse, samt at jeg har søkt en del rundt, men jeg finner ikke ut av disse to (nokså elementære) problemstillingene. Lenke til kommentar
charlie di meola Skrevet 26. november 2005 Del Skrevet 26. november 2005 b=~a; 123456789012345678901234567890 Lenke til kommentar
Zethyr Skrevet 26. november 2005 Del Skrevet 26. november 2005 Thx, da funka det flott.. Ser ut til at jeg bare hadde forvirra meg selv med syntaxen fra noen andre språk av noe slag Lenke til kommentar
Zethyr Skrevet 26. november 2005 Del Skrevet 26. november 2005 (endret) Jeg spør mange dumme spørsmål nå, men... Finnes det noen funksjon som standard i c++ som er ekvivalent med assemblys ROL eax,99 ? (ROL har OPCODE c1c3) Hvordan kan jeg eventuelt implementere denne funksjonen i assemblyform i et program, og da utføre den på integeren d? (url til god, selvforklarende guide for inline asm i c++? finner ingen gode selv, sliter med søkestrengene i google) Eller kanskje noen vet om en enkel måte å lage en c++-funksjon som gjør samme jobben som ROL ? Da en: int Rol(int* target, int nr){ /*...*/ } ? edit: ser ut som om det fungerer slik: (x<<5)|(x>>(32-5)) for en ROL 5, og for 99 da så bare tar jeg 99%32 og stapper det inn i stedet for 5 *wee* Endret 26. november 2005 av Zethyr Lenke til kommentar
-kga- Skrevet 3. desember 2005 Del Skrevet 3. desember 2005 //--------------------------------------------------------------------------- #include <stdio.h> #define STUDENTS 3 #define EXAMS 4 //--------------------------------------------------------------------------- int minimum( const int grades[][ EXAMS ], int pupiles, int tests ); int max( const int grades[][ EXAMS ], int pupiles, int tests ); double average( const int grades[][ EXAMS ], int tests, int studentnr ); void pirint( const int array[][ EXAMS ], int pupiles, int tests ); int main() { const int studentgrades[ STUDENTS ][ EXAMS ] = { { 40, 30, 40, 50 }, { 20, 30, 20, 50 }, { 60, 50, 10, 20 } }; int max, min; int i; print( studentgrades, STUDENTS, EXAMS ); printf( "\n\minimum grade: %d\n", minimum( studentgrades, STUDENTS, EXAMS ) ); printf( "maximum grade: %d\n", max( studentgrades, STUDENTS, EXAMS ) ); for ( i = 1; i <= STUDENTS; i++ ) { printf( "The average grade for student %d is: %.1f", i, average( studentgrades, EXAMS, i ) ); } /* emd for */ getchar();getchar(); return 0; } //--------------------------------------------------------------------- /* functions */ /* function to find lowest grade */ int minimum( const int grades[][ EXAMS ], int pupiles, int tests ){ int i, j; /* counter */ int lowGrade = 60; /* max grade */ for ( i = 0; i < pupiles; i++ ){ for ( j = 0; j < tests; j++ ) { if ( grades[ i ][ j ] < lowGrade ) { lowGrade = grades[ i ][ j ]; } /* end if */ } /* end for */ } /* end for */ return lowGrade; /* returns value of lowest grade */ } /* end function */ /* function to find max grade */ int max( const int grades[][ EXAMS ], int pupiles, int tests ){ int i, j; /* counter */ int higGrade = 0; /* max grade */ for ( i = 0; i < pupiles; i++ ){ for ( j = 0; j < tests; j++ ) { if ( grades[ i ][ j ] > higGrade ) { higGrade = grades[ i ][ j ]; } /* end if */ } /* end for */ } /* end for */ return higGrade; /* returns value of lowest grade */ } /* end function */ /* function to find average value */ double average( const int grades[][ EXAMS ], int tests, int studentnr ) { int i; float total = 0; float gj; for ( i= 0; i < tests; i++ ) { total += grades[ studentnr ][ i ]; /* total of all grades to student */ } /* end for */ gj = total / tests; return gj; } /* end function */ /* function print array */ void pirint( const int array[][ EXAMS ], int pupiles, int tests ) { int i, j; printf( "The array is:" ); for ( i = 0; i < pupiles; i++ ) { printf( "Studentgrades[%d] = ", pupiles + 1 ); for ( j = 0; j < tests; j++ ) { printf( "%d ", pupiles, array[ i ][ j ] ); } /* end for */ printf( "\n" ); } /* end for */ } /* end function */ hva har jeg gjort feil. Får feilmelding cal of non function på der jeg kaller på max funktionen. Lenke til kommentar
JBlack Skrevet 3. desember 2005 Del Skrevet 3. desember 2005 Du har både en funksjon og en variabel som heter max. Lenke til kommentar
phatsam Skrevet 6. januar 2006 Del Skrevet 6. januar 2006 (endret) n/m, fant svaret. Endret 7. januar 2006 av phatsam 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å