Avatar billede whistler_whistler Nybegynder
25. januar 2005 - 15:35 Der er 10 kommentarer og
1 løsning

Hvordan kan man teste getchar og putchar

Jeg er i gang med at læse en bog om c programmering og er en ren nybegynder. I bogen er der en masse eksempler med getchar() og putchar() men hvordan kan man teste at ens program virker. Her tænker jeg på hvordan man kan give min funktion et input.
Et eksempel: Skriv et program som tæller antallet af linier i et input:

#include <stdio.h>
main(){
  int c, n;
  n=0;
  while( (c=getchar() ) != EOF )
      if ( c=='\n')
        ++n;
  printf("%d\n", n);
}

jeg fatter fint nok koden men hvordan kan jeg nu teste at det også fungerer, altså hvordan giver jeg mit program et input ?
Jeg bruger "microsoft visual c++" på en win XP maskine

mvh
Avatar billede arne_v Ekspert
25. januar 2005 - 15:45 #1
getchar læse fra tastaturet
Avatar billede arne_v Ekspert
25. januar 2005 - 15:46 #2
hvis du skal læse fra fil er det fgetc
Avatar billede arne_v Ekspert
25. januar 2005 - 15:47 #3
Du kan naturligvis redirecte input med:

program.exe < input.fil
Avatar billede whistler_whistler Nybegynder
25. januar 2005 - 16:57 #4
jeg kunne vel ikke få dig til at lave et lille eksempel som tæller antal linier i en fil ?
Avatar billede arne_v Ekspert
25. januar 2005 - 18:42 #5
Dit program bør virke:

C:\>type test.txt
a
bb
ccc

C:\>type count1.c
#include <stdio.h>

int main()
{
  int n = 0;
  int c;
  while((c=getchar()) != EOF)
  {
    if(c == '\n')
    {
      n++;
    }
  }
  printf("%d\n", n);
  return 0;
}

C:\>gcc count1.c -o count1.exe

C:\>count1 < test.txt
3
Avatar billede whistler_whistler Nybegynder
25. januar 2005 - 18:42 #6
når jeg kører den kode jeg skrev kommer der en kommando propt op. I dene kan jeg så skrive men hvordan skriver jeg EOF således at jeg når til linien printf("%d\n", n); ?
Avatar billede arne_v Ekspert
25. januar 2005 - 18:45 #7
Men personlige synes jeg at følgende er pænere:

C:\>type count2.c
#include <stdio.h>

int main(int argc, char *argv[])
{
  FILE *fp;
  int n = 0;
  char line[100];
  fp = fopen(argv[1], "r");
  while(fgets(line,sizeof(line),fp))
  {
    n++;
  }
  printf("%d\n", n);
  return 0;
}

C:\>gcc count2.c -o count2.exe

C:\>count2 test.txt
3
Avatar billede arne_v Ekspert
25. januar 2005 - 18:46 #8
Se min 18:42:40 kommentar for et eksmepel på hvordan man kører det.

program < fil
Avatar billede whistler_whistler Nybegynder
25. januar 2005 - 18:49 #9
ja jeg så ikke du havde skrevet, så jeg kigger lige på det
Avatar billede whistler_whistler Nybegynder
25. januar 2005 - 18:52 #10
det virker. Tak for hjælpen
Avatar billede arne_v Ekspert
25. januar 2005 - 18:54 #11
så ligger jeg et svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester