Kodexempel F4
Först, en beskrivning av hur aritmetiska
konverteringar fungerar i C.
- Indentering är viktigt. Två, fyra eller åtta mellanslag.
- Måsvingar placeras på samma rad för {, på egen rad för }. (Undantag:
fortsättning av satsen, som i do...while).
- Variabelnamn ska vara korta men begripliga. Använd blandning av
små/stora bokstäver eller _, men inte bådadera.
- Funktioner ska vara korta (tumregel: 25 rader). Dela upp om de blir
längre.
- Kommentarer passar bäst i funktionshuvudet. Kan också användas som
logisk blockavskiljare. Förklara "vad", inte "hur"!
int lintrend(int x[], y[])
{
...
/*------------------------------- First block */
for (i=0; i<10; i++) {
...
}
/*------------------------------- Second block */
do {
...
} while (cflag);
...
}
Ett exempel på hur kod inte ska indenteras:
begin
form1.Gauge3.maxvalue:=(ss_end+1);
filter:=(ss_end+1) div 10;
ss_start := 0;
ss_end := 0;
ss_sum := 0;
counter:=1;
left := Low(arrej);
if n < High(arrej) + 1 then
right := n - 1
else right := High(arrej);
for i := left to right do begin
tmp_sum := 0;
{implementation för tidsmätare de 7 kommande raderna}
inc(counter,1);
if form1.if_gauge.checked then
if counter mod filter =0 then
begin
form1.Gauge3.progress:= counter;
form1.update;
end;
for j:= i to right do begin
Inc(tmp_sum,arrej[j]);
if tmp_sum > ss_sum then begin
ss_sum := tmp_sum;
ss_start := i;
ss_end := j
end; { if }
end; { for j }
end; { for i }
end; { procedure }
Denna OH visade jag inte.
#include <string.h>
int main(void)
{
char s1[100] = "Ettan", s2[12] = "Tvåan", *p, *s="ABC";
strcpy(s2, s1); /* s2 blir "Ettan" */
strcat(s2, s1); /* s2 blir "EttanEttan" */
strcat(s2, s1); /* FEL! s2 blir för lång */
...
strcpy(s1, "Ettan"); /* s1 blir "Ettan" */
strcpy(s2, s1); /* Dito för s2 */
if (strcmp(s1, s2))
... /* Körs om de är olika */
strcpy(p, s1); /* FEL! p är odefinierad */
p=strdup(s1); /* Detta är bättre */
p=strchr(s1, "t"); /* p pekar på s1[1] */
p=strstr(s1, "ta"); /* p pekar på s1[2] */
*s='B'; /* FEL! (BBC eller krasch...) */
...
}
#include <stdio.h>
#include <string.h>
int main(void)
{
char s[100] = "33.5 \t , , , 103.55 "
", \t 57.2",
*p;
p=strtok(s, " \t,");
while (p) {
puts(p);
p=strtok(NULL, " \t,"));
}
return 0;
}
#include <stdio.h>
#include <string.h>
int main(void)
{
char s[100], ans[100], *minus;
... /* Read the string */
minus=strchr(s, '-')+3;
strcpy(ans, minus);
*strchr(ans, '-')='\0';
...
/* Note: in real world, we would check */
/* for NULL! */
}
int i=26;
char c='A', s[]="klammer";
float pi=3.141;
printf("%c\n", c); A
printf("!%x!\n", i); !1a!
printf("!%d!\n", i); !26!
printf("!%5d!\n", i); ! 26!
printf("!%-5d!\n", i); !26 !
printf("!%3.5d!\n", i); !00026!
printf("!%s!\n", s); !klammer!
printf("!%10s!\n", s); ! klammer!
printf("!%-10s!\n", s); !klammer !
printf("!%f!\n", pi); !3.141000!
printf("!%5.2f!\n", pi); ! 3.14!
printf("!%e!\n", pi); !3.141000e+00!
printf("%p\n", s); effffc70
Denna OH visade jag inte.
#include <stdio.h>
int write_int(int v[], int n)
{
int i;
FILE *ofp;
if ( (ofp=fopen("ut.bin", "w")) == NULL)
return -1;
for (i=0; i<n; i++)
if (fwrite(&v[i], sizeof(int), 1, ofp) == 0)
return -1;
fclose(ofp);
return 0;
} /* (Could also be done with a single fwrite.) */
Denna OH visade jag inte.
#include <stdio.h>
int read_int(int v[], int n)
{
int i;
FILE *ifp;
if ( (ifp=fopen("in.bin", "r")) == NULL)
return -1;
if (fread(v, sizeof(int), n, ifp) == 0)
return -1;
fclose(ifp);
return 0;
}
[an error occurred while processing this directive]