OVOXO Skrevet 23. februar 2016 Forfatter Del Skrevet 23. februar 2016 Hvis man kjører en evig while løkke, er det mulig å sette inn noe som tillater den som kjører løkka å stoppe når som helst? Typ getchar() uten at det pauser løkken? Lenke til kommentar
kjeita Skrevet 23. februar 2016 Del Skrevet 23. februar 2016 (endret) Multi process med getchar() og delt variabel hvor den evige while løkken kjører så lenge denne variabelen er true? Hvis dette er noe fysiske greier så kan du alltids ha en sjekk inne i while løkken som sjekker om en knapp er trykket eller ikke, og bryte ut av løkken hvis den er. Endret 23. februar 2016 av kjeita Lenke til kommentar
OVOXO Skrevet 23. februar 2016 Forfatter Del Skrevet 23. februar 2016 Ikke nødvendigvis getchar, men noe som kan avbryte while løkken når bruker ønsker/er ferdig. Lenke til kommentar
Hårek Skrevet 23. februar 2016 Del Skrevet 23. februar 2016 Det kommer an på kontekst. Hvis du har en enkel CPU uten OS, så er det vanskelig. Da er CPU 100% opptatt i løkken, og kan ikke sjekke noe annet. Dvs løkken din må sjekke for dette 'noe'. Har man et OS så kjører man flere tråder, slik at en annen tråd kan håndtere en avbruddsmekanisme. Da trenger løkken din bare sjekke en variabel som settes av den andre tråden. Lenke til kommentar
OVOXO Skrevet 26. februar 2016 Forfatter Del Skrevet 26. februar 2016 Stemmer det at hvis jeg skal ha en subroutine eller funksjon så må jeg først lage selve subroutine/funksjonen, deretter lage en header og inkludere referanse til headeren i main filen og subroutinen/funksjonen, også lage objekt fil av både main og funksjonen også compile? Lenke til kommentar
Hårek Skrevet 26. februar 2016 Del Skrevet 26. februar 2016 Jeg antar du bruker C, ikke C++. (en C fil har fileextension .c, en C++ fil har filextension .cpp) Du trenger ikke lage noen header fil (men det er vanlig å ha noen). Du trenger en deklarasjon av funksjonen. Se eksempel her: http://www.tutorialspoint.com/cprogramming/c_functions.htm /* function declaration */int max(int num1, int num2); Dette forteller kompilatoren hva max betyr når den kommer dit. Det er også mulig å sløyfe deklarasjonen, kompilatoren kan akseptere det hvis funksjonen kommer før (over) stedet funksjonen brukes. Men slikt er dårlig praksis. 1 Lenke til kommentar
OVOXO Skrevet 7. mars 2016 Forfatter Del Skrevet 7. mars 2016 (endret) Er det teoretisk mulig å lese verdier fra første kolonne i en fil med fire kolonner og skrive det inn i en annen fil, (dvs. ignorere de tre andre). Har noen en side å anbefale hvor det forklares enkelt/bra om bruken av pekere i C? Endret 7. mars 2016 av OVOXO Lenke til kommentar
Hårek Skrevet 8. mars 2016 Del Skrevet 8. mars 2016 En normal løsning er å lese hele filen inn i minnet, og så skrive ut de delene du ønsker til den andre filen. Lenke til kommentar
OVOXO Skrevet 8. mars 2016 Forfatter Del Skrevet 8. mars 2016 (endret) Jeg forsøkte ved hjelp av scanf i for-løkke, hvor jeg hadde fire kolonner. Jeg lagret verdiene i 4 forskjellig array og printet den jeg skulle bruke i samme løkka, og da samsvarte verdiene. Når jeg printet den igjen i en ny for-løkke hadde alle verdiene endret seg til samme verdi som var den siste verdien som ble printet fra de opprinnelige verdiene, og når den skulle skrive inn verdiene i en ny fil, så skrev den enten inn 0 eller et veldig høyt tall (ingen relasjon til verdiene fra filen den leste av). Noen som vet hva det kan komme av? Endret 8. mars 2016 av OVOXO Lenke til kommentar
Hårek Skrevet 8. mars 2016 Del Skrevet 8. mars 2016 Kan ikke si uten nå se koden din. Men mistenker at du gjør en vanlig begynnerfeil - de første verdiene dine ligger som lokal variabel i en funksjon, dvs de ligger på stack og forsvinner når du går ut av funksjonen. Lag en global varibel istedet. http://www.codingunit.com/c-tutorial-functions-and-global-local-variables Lenke til kommentar
OVOXO Skrevet 8. mars 2016 Forfatter Del Skrevet 8. mars 2016 Hele koden kjøres i samme for(...) { fscanf(readFile, "%f %f %f %f %f", &CurrentPos,&TargetPos, &Err, &Outp, &Motor) printf("CurrentPos") } (Dette gir de riktige verdiene) for(...) //Lengde er samme som forrige { printf("CurrentPos") } (Dette kjøres rett etter og gir kun den siste verdien) Lenke til kommentar
Hårek Skrevet 8. mars 2016 Del Skrevet 8. mars 2016 Problemet må være i noe av koden som du ikke viser. I første for loop så printer du hver verdi med en gang den leses. Men du lagrer tydeligvis ikke disse verdiene hver for seg, alle lagres på samme plass? Så kanskje det er noe med index verdien (i) som er feil. Lenke til kommentar
OVOXO Skrevet 8. mars 2016 Forfatter Del Skrevet 8. mars 2016 for loopen går fra for(i=0;P<Iteration_Size+1;i++) for Iteration_Size er størrelse på en while løkke, størrelsen printes i funksjonen også for å dobbeltsjekke at lengden er riktig. Verdien som printes er også for i'te leddet, jeg har også forsøkt å printe i leddet underveis. Den andre for-løkken kjøres rett etter den første, så det skjer ingenting mellom den første og siste. Lenke til kommentar
OVOXO Skrevet 2. mai 2016 Forfatter Del Skrevet 2. mai 2016 Hei! Jeg prøver å bestemme at en while-løkke skal kjøre hver 0.1 sekund. Jeg prøvde først å hente tids forskjellen med double seconds; int main() { double seconds; clock_t start_t, end_t, total_t; time_t now, later; time(&now); usleep(100000); time(&later); seconds=difftime( later, now); printf("total tid %lf\n",seconds); } Når jeg setter usleep på 10^6 viser den 1, men hvis den settes på 10^5 gir den 0. Deretter prøvde jeg med denne løsningen; int main() { double seconds; clock_t start_t, end_t; start_t = clock(); usleep(1000000); end_t= clock(); seconds = (double)(end_t - start_t)/CLOCKS_PER_SEC ; printf("total tid %lf\n",seconds); } Dette ga 0.000027, og verdienen varierer veldig. Er det noen som har en god løsning på dette? Lenke til kommentar
Hårek Skrevet 2. mai 2016 Del Skrevet 2. mai 2016 Det du får med time() er faktisk tid, men du har bare 1 sekund oppløsning. Som du erfarer. Med clock() får du ikke faktisk tid - "Returns the approximate processor time used by the process". Du finner diskusjoner rundt dette på stackoverflow. Hvis man skal få noe til å skje med nøyaktig tidsintervaller så bør man ha et real-time OS. I det minste må du ha en timer som kaller funksjonen din, istedet for å gjøre det fra en løkke med sleep. Lenke til kommentar
OVOXO Skrevet 2. mai 2016 Forfatter Del Skrevet 2. mai 2016 Tenkte opprinnelig å forsøke meg på denne løsningen http://stackoverflow.com/questions/12777254/time-delay-in-c-usleep 8down voteaccepted Instead of sleeping for 20000 useconds, sleep for the time left till you want to run again, based on the call to clock_gettime I.e: usleep( lasttime+20000-now ); // But make sure you don't sleep when the result is negative Men siden jeg programerer på OSX, så har jeg ikke clock_Gettime, og forsøker derfor å finne en alternativ. 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å