Avatar billede bolmer Nybegynder
14. marts 2005 - 20:14 Der er 23 kommentarer og
1 løsning

Kode udskriver ingenting!

#include <stdio.h>

main(){
   
    int c, i, nwhite, nother;
    int ndigit[10];
   
    nwhite = nother = 0;
   
    for (i = 0; i < 10; ++i)
        ndigit[i] = 0;
       
    while ((c = getchar()) != EOF)
        if (c >= '0' && c <= '9')
            ++ndigit[c-'0'];
        else
            if (c == ' ' || c == '\n' || c == '\t')
                ++nwhite;
                else
                    ++nother;
                   
    printf("digits =");
    for (i = 0; i < 10; ++i)
        printf(" %d", ndigit[i]);
       
    printf(", white space = %d, other = %d\n",
        nwhite, nother);
       
}

Efter jeg har kompileret ovenståden kode kan jeg køre en .exe fil. Denne fil skulle udskrive hvor mange gange de forskellige tal opstår, men der sker ikke noget hvis man fx skriver:

2323 2 23
Avatar billede arne_v Ekspert
14. marts 2005 - 20:23 #1
Hm.

Det virker OK hos mig !
Avatar billede bertelbrander Novice
14. marts 2005 - 20:24 #2
Her virker det. Man afslutter ved at trykke Ctrl+Z, eller Ctrl+D på Linux/Unix
Avatar billede bolmer Nybegynder
14. marts 2005 - 20:27 #3
Kan det være fordi jeg køre kode på winXP?
Avatar billede bertelbrander Novice
14. marts 2005 - 20:30 #4
Jeg kører også XP.
Hvordan kører du programmet?
Hvilken kompiler?
Avatar billede bolmer Nybegynder
14. marts 2005 - 20:34 #5
Jeg bruger Cygwin da min kode skal kunne bruges på Linux maskiner. Jeg dobbeltklikker bare på .exe filen
Avatar billede arne_v Ekspert
14. marts 2005 - 20:34 #6
Tror jeg ikke.

Det er vel ikke fordi at du starter den fra noget windows og at DOS boxen lukker
inden du når at se tallene ?
Avatar billede bolmer Nybegynder
14. marts 2005 - 20:36 #7
Nej DOS boksen lukker ikke men den viser bare ikke det der skal udskrives.
Avatar billede arne_v Ekspert
14. marts 2005 - 20:43 #8
C:\>gcc -v
Reading specs from /usr/lib/gcc-lib/i686-pc-cygwin/3.2/specs
Configured with: /netrel/src/gcc-3.2-3/configure --enable-languages=c,c++,f77,ja
va --enable-libgcj --enable-threads=posix --with-system-zlib --enable-nls --with
out-included-gettext --enable-interpreter --disable-sjlj-exceptions --disable-ve
rsion-specific-runtime-libs --enable-shared --build=i686-pc-linux --host=i686-pc
-cygwin --target=i686-pc-cygwin --enable-haifa --prefix=/usr --exec-prefix=/usr
--sysconfdir=/etc --libdir=/usr/lib --includedir=/nonexistent/include --libexecd
ir=/usr/sbin
Thread model: posix
gcc version 3.2 20020927 (prerelease)

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

C:\>z
211
21432532
4332
digits = 0 3 5 4 2 1 0 0 0 0, white space = 3, other = 0
Avatar billede arne_v Ekspert
14. marts 2005 - 20:43 #9
Med cygwin skal du bruge CTRL/D
Avatar billede bolmer Nybegynder
14. marts 2005 - 20:44 #10
Ok man kan ikke bare finde .exe filen i windows stifinder og så dobbletklikke på den??
Avatar billede arne_v Ekspert
14. marts 2005 - 20:46 #11
jo men så lukker vinduet jo med det samme
Avatar billede bolmer Nybegynder
14. marts 2005 - 20:47 #12
Nej det lukker ikke med det samme der bliver bare ikke udskrevet noget.
Avatar billede bertelbrander Novice
14. marts 2005 - 20:59 #13
Prøv at putte en getchar(); ind til slut.
Kompiler og køre programmet igen.
Skriv nogle tegn efterfulgt af CTRL+D (og/eller CTRL+Z).
Så skulle den gerne skrive noget.
Du afslutter så ved at trykke enter.
Avatar billede bolmer Nybegynder
14. marts 2005 - 23:13 #14
Når jeg trykker CTRL+D eller CTRL+Z så lukker vinduet bare. Jeg kan stadig ikke få den til at udskrive noget som helst...Skal jeg prøve at installere en anden kompiler end den der kommer med Cygwin?
Avatar billede arne_v Ekspert
14. marts 2005 - 23:16 #15
hvad sker der hvis du kører det i en permanent DOS box ?
Avatar billede arne_v Ekspert
14. marts 2005 - 23:17 #16
Og medmindre du har behov for Unix/Linux kompabilitet så vil jeg anbefale
mingw32 fremfor cygwin.
Avatar billede bertelbrander Novice
14. marts 2005 - 23:17 #17
Når du trykker CTRL+D eller CTRL+Z skriver den resultatet og lukker vinduet inden du når at læse.

Put en getchar(); ind til slut, eller kør programmet fra en dos-box
Avatar billede bolmer Nybegynder
14. marts 2005 - 23:29 #18
Ok nu har jeg indsat getchar(); som det sidste i main funktionen og rigtigt nok så udskriver den det ønskede efter jeg trykker CTRL+Z.

Men hvad er forklaringen lige på dette? Og hvordan skulle man lige have gættet sig frem til det? Hvad er forskellen på at bruge CTRL+Z og CTRL+D (Bortset fra at CTRL+D ikke medfører at der bliver udskrevet noget).
Avatar billede bertelbrander Novice
14. marts 2005 - 23:33 #19
CTRL-Z er EOF på windows, CTRL+D er EOF på Linux og Unix. Din loop kører indtil den møder EOF.
Avatar billede bolmer Nybegynder
06. maj 2005 - 21:13 #20
Hvordan giver jeg dig point?
Avatar billede arne_v Ekspert
06. maj 2005 - 21:15 #21
mig eller Bertel ?
Avatar billede bolmer Nybegynder
22. juni 2005 - 21:11 #22
Bertel
Avatar billede bertelbrander Novice
22. juni 2005 - 23:04 #23
Så har vi et problem; jeg samler ikke på point.
Avatar billede bolmer Nybegynder
07. juli 2005 - 11:33 #24
Bertel samler ikke på point :-)
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





White paper
Tidsbegrænset kampagne: Overvejer du at udskifte eller tilføje printere i din forretning? Vi kan tilbyde én eller flere maskiner gratis