Anonymní profil kiklop – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil kiklop – Programujte.comAnonymní profil kiklop – Programujte.com

 

Příspěvky odeslané z IP adresy 178.40.94.–

kiklop
C / C++ › nacitanie znakov
1. 1. 2012   #151847

aha takze teoreticky to staci prepisat na while (((x < MAX)) && (pole[x] = getchar())) aby sa najprv vyhodnotilo to x < MAX ?

kiklop
C / C++ › nacitanie znakov
1. 1. 2012   #151843

aha takze potrebujem druhy pocitac :D Ale ne teraz vazne, vsak su tam nastavene medze , tak jak mozem prepisovat pamat za polom ?  Asi to robi posledny enter (znak nove riadku) ? Jak by sa to dalo osetrit ?

kiklop
C / C++ › nacitanie znakov
1. 1. 2012   #151839

zaujimalo by ma este , spravil som nieco taketo

#include <stdio.h>
#include <string.h>

#define MIN 4
#define MAX 7

int main()
{
    char pole[MAX];
    int x = 0;

    while ((pole[x] = getchar()) && (x < MAX))
    {
        if ((pole[x] == '\n') || pole[x] == ' ')
            continue;
        else if (pole[x] == '*')
        {
            break;
        }


        x++;
    }

    if (x < MIN)
    {
        puts("Nedodrzanzy minimalny pocet znakov");
        return 1;
    }

    printf("\n%d", x);

    for (int i = 0; i < (strlen(pole) - 1) ; i++)
    {
        for (int j = i + 1; j < strlen(pole) ; j++)
        {
            if (pole[i] == pole[j])
            {
                puts("\nZnaky niesu unikatne !");

                return 1;
            }
        }

    }

    return 0;
}

a dam vstup trebars "qweasdyxc" tak preco u mna premenna x obsahuje hodnotu 120 miesto 7 ?

Hodnoty premennej x som sledoval debuggerom v okne watches , a paradoxne ma ku koncu hodnotu 7 ale akonahle program vyskoci z toho cyklu while sa jej hodnota prepise na 120 , preco ?

kiklop
C / C++ › nacitanie znakov
1. 1. 2012   #151838

tak ten prvy som uz vyriesil nejak takto

  while ((pole[i] = getchar()) && (i < 7))
    {
        if ((pole[i] == '\n') || pole[i] == ' ')
            continue;
        else if (pole[i] == '*')
            break;

        i++;
    }
kiklop
C / C++ › nacitanie znakov
1. 1. 2012   #151836

jedine co ma napada je pouzit nejaku funkciu ktora ignoruje biele znaky ? (scanf ?) Alebo to ide nejak spravit aj stym getcharom  ?

kiklop
C / C++ › nacitanie znakov
1. 1. 2012   #151835

Podla mna sa ten znak co tam bol strati , preto by ma zaujimalo jak tie sa zbavit toho noveho riadku ak tam je ... Nic ma ale nenapada :(

kiklop
C / C++ › nacitanie znakov
1. 1. 2012   #151833

#6 KIIV
ked nezvatsim tu hodnotu premennej i tak tie dalsie znaky stratim ktore som zadal , ja proste tie znaky budem potrebovat stym ze ked to budem zadavat stylom znak enter znak enter znak enter tak ten novy riadok sa zahodi ...

kiklop
C / C++ › nacitanie znakov
1. 1. 2012   #151832

je mi akoze celkom uz asi jasne ze problem je v tej podmienke if (znaky[i] == '\n')  pretoze ten potencialne  '\n' je v stupnej fronte ale nie este v tom poli, alebo sa mylim  ? Ked ano jak by som vedel testovat co je v tej stupnej fronte ? (getchar() == '\n') ?

kiklop
C / C++ › nacitanie znakov
1. 1. 2012   #151830

tak teraz som uz z toho vazne jelen :D Nemohol by si mi to Prosimta nejak nazorne ukazat jak to myslis  aby som to aj ja bezny smrtelnik pochopil ? Tym index pole  myslis tu premennu i ?

kiklop
C / C++ › nacitanie znakov
1. 1. 2012   #151828

aha Dik, takze ak som to dobre pochopil tak v tom druhom pripade staci negovat tu podmienku , konkretne "if ((!isalpha(znaky[i])))" avsak problem je ze aj ked to negujem tak mi to furt nevyhodnoti spravne ked zadam menej znakov ako maximalny mozny pocet, zadam napriklad len  'a' a hned sa to vyhodnoti ze to nieje abecedny znak, nechapem preco ...

K tomu prvemu prikladu stim si uz vazne neviem rady, mal by som to kontrolovat na ten '\n' nejak takto ? "'\n' == getchar()" a potom to dalsie getchar() vynechat ?

kiklop
C / C++ › nacitanie znakov
1. 1. 2012   #151825

este jeden taky problemik, 

#include <stdio.h>
#include <ctype.h>
#include <string.h>

#define VALUE 8

int main()
{

    char znaky[VALUE];

    fgets(znaky, 8, stdin);

    for (int i = 0; i < strlen(znaky); i++)
        if ((isalpha(znaky[i])))
            {
                puts("Zadali ste nejaky neabecedny znak !");

                return 1;
            }

    return 0;
}

nacitam si 8 znakov a kontrolujem znak po znaku ci sa jedna o abecedny znak , avsak zas to furt hadze blbosti ... Kde robim chybu ? :((((

kiklop
C / C++ › nacitanie znakov
1. 1. 2012   #151824

Zdravim, mame kod 

#include <stdio.h>

#define VALUE 7

int main()
{
    int i = 0;
    char znaky[VALUE];

    while ((znaky[i] = getchar()) && (znaky[i] != '*') && (i < VALUE))
    {
        if (znaky[i] == '\n')
            getchar();
        i++;
    }

    for (int j = 0; j < i; j++)
        printf("%c", znaky[j]);

    return 0;
}

Cecko sa moc dlho neucim ... Proste som sa to snazil naprogramovat tak aby to nacilo 7 znakov pricom ked sa nacita znak '*' tak sa nacitavanie skonci avsak nejak mi to nefunguje :(  To if (znaky[i] == '\n') som sa znazil vyriesil situaciu ze ked sa nacita znak noveho riadku aby neostal na stupnej fronte a aby sa nezapisal do toho pola znaky. Moze mi prosim niekto vysvetlit kde robim chybu a ako to vyriesit ? Dakujem za pripadne odpovede .

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032021 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý