Favicon Svetmobilne.cz  Svět mobilně Favicon Svetaudia.cz  Svět audia Favicon TVFreak.cz  TV Freak   Fórum Favicon Digimanie.cz  Digimanie   Fórum   Galerie Společnost oXy Online s.r.o.
Zobrazené výsledky: 1 až 14 z 14

Téma: C výpis znaku z pole po jednom

  1. #1
    Pravidelný diskutér Avatar uživatele kanabis
    Registrace
    Aug 2008
    Příspěvků
    256

    Zdravím,
    snažím se napsat program, který vypíše 1 znak z pole, udělá pauzu a tak se to opakuje do vypsání celého pole. Vždy se ale celý text vypíše najedou. Nevíte co s tím? Dík
    Zdroják je tu. Problém je někde ve funkci druha()

    Kód:
    //
    //  main.c
    //  retezec1
    //
    //  Created by Pavel Tomáš on 10.01.12.
    //  Copyright 2012 __MyCompanyName__. All rights reserved.
    //
    
    #include <stdio.h>
    #include <string.h>
    #include <time.h>
    
    #define MAX 25
    
    void prvni (void)
    {
        int a;
        
        for (a = 97; a <= 122; a++) {
            printf("%c", a);
        }
        printf("\n");
        for (a = 65; a <= 90; a++) {
            printf("%c", a);
        } 
        printf("\n");
    }
    
    void cekej(void)
    {
        clock_t stav;
        stav = 20000 + clock();
        while (stav > clock());
    }
    
    void druha(void)
    {
        char retezec[MAX], slon;
        int krok;
        
        printf("Zadaj text do dalnopisu\n");
        scanf("%s", &retezec);
        printf("Odesílám dálopis\n");
        for (krok = 0; krok < MAX; krok++) {            // TADY to nějak nefunguje
            slon = retezec[krok];
            printf("%c", slon);
           cekej();
        }
    }
    
    int main (int argc, const char * argv[])
    {
    
        // insert code here...
        printf("Řetězce!\n");
        
       // prvni();
        druha();
        return 0;
    }
    Odpovídat lze po přihlášení

  2. #2
    Občasný diskutér
    Registrace
    Jul 2009
    Příspěvků
    68

    Oprava funkce druha:


    void druha(void)
    {
    char retezec[MAX], slon;
    int krok;
    int delka; // *** doplněno

    printf("Zadaj text do dalnopisu\n");
    scanf("%s", retezec); // *** původně: &retezec);
    printf("Odesílám dálopis\n");
    delka = strlen(retezec); // *** doplněno
    for (krok = 0; krok < delka; krok++); { // vypustit středník !//*** původně: MAX; krok++) {// TADY to nějak nefunguje
    slon = retezec[krok];
    printf("%c", slon);
    cekej();
    }
    }

    Edit: Pardon, omylem jsem mezi instrukci "for(..... )" a závorku "}" napsal středník. Je nutno jej vypustit.
    Naposledy upraveno uživatelem gabera: 18-01-2012 v 21:43
    Odpovídat lze po přihlášení



  3. #3
    Pravidelný diskutér Avatar uživatele kanabis
    Registrace
    Aug 2008
    Příspěvků
    256

    Bohužel nic. Chová se to stále stejně.

    Když si na printf("%c", slon); dám breakpoint, tak vidím, že se každý krok mění hodnota slonu správně. Vypíše se to ale až potom, co se dokončí celé for. Také se mi zdá, že to nejdříve čeká a až pak vypisuje, což je taky divné.
    Odpovídat lze po přihlášení

  4. #4
    Obyvatel SHW Avatar uživatele Suprak
    Registrace
    Mar 2009
    Příspěvků
    408

    Nějak takto?
    Kód:
    #include<stdio.h>
    #include<windows.h>
    #include<string.h>
    int main()
    {
    char retezec[]="";
    int krok;
    int delka;
    
    printf("Zadaj text do dalnopisu\n");
    scanf("%s", retezec);
    printf("Odesilam dalopis\n");
    delka = strlen(retezec);
    for (krok = 0; krok < delka; krok++)
    {
    printf("%c", retezec[krok]);
    Sleep(300);
    }
    getchar();
    getchar();
    }
    Odpovídat lze po přihlášení

  5. #5
    Občasný diskutér
    Registrace
    Jul 2009
    Příspěvků
    68

    Citace Původně odesláno od Suprak Zobrazit příspěvek
    Nějak takto?
    Kód:
    int main()
    {
    char retezec[]="";
    .....
    
    }

    Nutno definovat delku řetězce, např.:

    char retezec[25]="";
    Odpovídat lze po přihlášení

  6. #6
    Starousedlík SHW Avatar uživatele Salamander
    Registrace
    May 2006
    Příspěvků
    6,242

    no, tak pozde, nevadi ... ale jenom malou radu, ze takhle to neni uplne nejlepsi napad delat
    Naposledy upraveno uživatelem Salamander: 18-01-2012 v 22:20
    Odpovídat lze po přihlášení

  7. #7
    Pravidelný diskutér Avatar uživatele kanabis
    Registrace
    Aug 2008
    Příspěvků
    256

    Vaše úpravy zavedeny ale stále nic. Zajímevé je, že když při tisku znaku odřadkuju (printf("%c\n", slon) tak to funguje, tak jak má. Já bych to ale potřeboval na jeden řádek. Zdá se, že kod bude tedy víceméně dobře a chyba je někde na úrovni, na které zatím opravdu nejsem.

    Speciální poznámka pro Suprak: windows.h tu nemám. Nejsem na windows. To má ale vliv jen na Sleep(300);, že?

    Mometálně mám tedy kod tento.
    Kód:
    void druha(void)
    {
        char retezec[MAX]="", slon;
        int krok, delka;
        
        printf("Zadaj text do dalnopisu\n");
        scanf("%s", retezec);
        printf("Odesílám dálopis\n");
        delka = strlen(retezec); 
        for (krok = 0; krok < delka; krok++) {
            slon = retezec[krok];
            printf("%c", slon);
           cekej();
        }
    }
    Edit: Salamander - jde o pevnou alokaci? Až to bude fungovat, tak to přepíšu na dynamickou
    Odpovídat lze po přihlášení



  8. #8
    Starousedlík SHW Avatar uživatele Salamander
    Registrace
    May 2006
    Příspěvků
    6,242

    jo, pevna alokace a pohodlnej, ale ne uplne bezproblemovej scanf
    Odpovídat lze po přihlášení

  9. #9
    Pravidelný diskutér Avatar uživatele kanabis
    Registrace
    Aug 2008
    Příspěvků
    256

    A čím ho nahradit? Mám tu C učebnici od Pavla Herouta a zatím jsem tam na nic lepšího nenarazil. A v tomto kodu funguje dobře. Když se podívám na obsah pole, tak to je dobře zapsané.
    Odpovídat lze po přihlášení

  10. #10
    Obyvatel SHW Avatar uživatele Suprak
    Registrace
    Mar 2009
    Příspěvků
    408

    Ano, pouze Sleep. Multiplatformost končí tam kde začíná windows
    Odpovídat lze po přihlášení

  11. #11
    Občasný diskutér
    Registrace
    Jul 2009
    Příspěvků
    68

    Citace Původně odesláno od kanabis Zobrazit příspěvek
    Vaše úpravy zavedeny ale stále nic. Zajímevé je, že když při tisku znaku odřadkuju (printf("%c\n", slon) tak to funguje, tak jak má. Já bych to ale potřeboval na jeden řádek.
    .....

    Nejsem na windows.
    .....

    Ve Windows XP poslední verze kódu vypisuje text na jeden řádek (zkusil jsem předklad a spuštění). Na jaké platformě to děláš ty?
    Odpovídat lze po přihlášení

  12. #12
    Starousedlík SHW Avatar uživatele Salamander
    Registrace
    May 2006
    Příspěvků
    6,242

    Citace Původně odesláno od kanabis Zobrazit příspěvek
    A čím ho nahradit? Mám tu C učebnici od Pavla Herouta a zatím jsem tam na nic lepšího nenarazil. A v tomto kodu funguje dobře. Když se podívám na obsah pole, tak to je dobře zapsané.
    tak da se to resit treba getc (wgetc), s testovanim EOF, pak je i o dost jednodussi dynamicka alokace toho pole
    Odpovídat lze po přihlášení



  13. #13
    Čestný člen Avatar uživatele mech13
    Registrace
    May 2006
    Příspěvků
    5,779

    rekl bych ze se to hromadi v nejakem bufferu a optimalizacemi to ceka na vic veci k vypisu...

    vyzkousej neco na tento styl (nezkousel jsem, jen me napadlo): fflush(stdout); http://www.cplusplus.com/reference/c...cstdio/fflush/

    Pripadne prenastavit kompilator aby nebufferoval
    Odpovídat lze po přihlášení

  14. #14
    Pravidelný diskutér Avatar uživatele kanabis
    Registrace
    Aug 2008
    Příspěvků
    256

    Tak mech13 na to přišel. Dík všem za pomoc
    Kód:
    for (krok = 0; krok < delka; krok++) {
            printf("%c", retezec[krok]);
            fflush(stdout);
            cekej();
    Odpovídat lze po přihlášení

Podobná témata

  1. Reakcí: 1
    Poslední příspěvek: 09-05-2013, 17:28
  2. Tutorial: Úprava NICKU-barva,font,přidání různých znaků
    Od lexxxa v sekci Trackmania Forever
    Reakcí: 1
    Poslední příspěvek: 10-07-2011, 12:42
  3. Výpis z databáze
    Od Tommy33 v sekci Programování
    Reakcí: 2
    Poslední příspěvek: 24-06-2011, 06:57
  4. Microsoft Office: Word a počet znaků
    Od Belbas v sekci Kancelářské balíky
    Reakcí: 9
    Poslední příspěvek: 09-04-2010, 13:54