aha takze teoreticky to staci prepisat na while (((x < MAX)) && (pole[x] = getchar())) aby sa najprv vyhodnotilo to x < MAX ?
Příspěvky odeslané z IP adresy 178.40.94.–
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 ?
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 ?
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++;
}
jedine co ma napada je pouzit nejaku funkciu ktora ignoruje biele znaky ? (scanf ?) Alebo to ide nejak spravit aj stym getcharom ?
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 :(
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') ?
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 ?
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 ?
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 ? :((((
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 .