Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 18. 01. 2011 15:20

misaj
Zelenáč
Příspěvky: 22
Reputace:   
 

C- výpis nejdelšího řádku

DObrý den, tento program je skoro přepsaný z knihy Keningham a Ritchie - Programovací jazyk C, nicméně mi dokola vypisuje stejně nesmyslné hodnoty. Měl by vypsat nejdelší řádek a jeho délku a vypíše nějaká divná písmena a délku 6. Nemohl by se na to někdo podívat a napsat, v čem by mohla být chyba?vstup ukončuji zavináčem. Moc děkuji

#include <stdio.h>

#define MAX 1000

int main (void)
{
    int r, max;
    char br[MAX], mr[MAX];
    max=0;

    while ((r=getline(br, MAX))>0)
        if(r>max)
        {
            max=r;
            copy(br, mr);

        }
    if (max>0)
    printf("Nejdelsi radek je %s, jeho delka je %i", mr, max);

}

getline (s,n)       /*nacte radek a vrati jeho delku*/
int n;
char s[];
{
    int i,c;


    for(i=0; i<n-1 & (c=getchar()) != '@' && (c=getchar()) != '\n'; ++i)
        {
            s[i]=c;
        }
    if (c=='\n')
    {
        s[i]=c;
        ++i;
    }
    s[i]='\0';
    return (i);
}

copy(s1,s2)
char s1[], s2[];
{
    int i;

    i=0;

    while((s1[i]=s2[i]) != '\0')
    ++i;
}

Offline

 

#2 18. 01. 2011 15:44

Lumikodlak
Místo: Praha
Příspěvky: 212
Pozice: Programator nebo tak neco :-)
Reputace:   19 
 

Re: C- výpis nejdelšího řádku

Tady na tomhle radku:

for(i=0; i<n-1 & (c=getchar()) != '@' && (c=getchar()) != '\n'; ++i)

Volas dvakrat gunkci getchar, takze to nacte dva znaky najednou, pri tom druhem porovnani bys tam mela pouzit akorat samotne c. Potom tam mas &, ale predpokladam, ze by to melobyt spis &&, coz muze delat problemy (tuhle chybu sam delam casto :-) )
Ten radek by mel podle me vypadat spis takhle:

for(i=0; i<n-1 && (c=getchar()) != '@' && c != '\n'; ++i)


Potom jeste jak mas:

copy(br, mr);

Tak tim to kopirujes z pole mr do br, ale predtim to nacitas do br a pak vypisujes mr, takze opacne by to melo by ok:

copy(mr, br);


No tak to kdyztak muzes vyzkouset a napsat, jestli to alespon castecne pomohlo :-)

Offline

 

#3 18. 01. 2011 15:54

misaj
Zelenáč
Příspěvky: 22
Reputace:   
 

Re: C- výpis nejdelšího řádku

↑ Lumikodlak:
Bezva, děkuju moc, už to šlape. To mě teda vůbec nenapadlo, že to vlastně getchar volám dvakrát.
A s tím kopírováním polí jsem si chtěla dát velkej pozor, abych kopírovala správnej do správnýho,ale nevyšlo to. Moc děkuju

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson