Reťazcový vstup pre užívateľa, (od)mocniny v C - Ako na to?

C,C++,C#

Moderátori: psichac, Moderátori

alvar
Nový člen
Nový člen
Príspevky: 58
Dátum registrácie: 16 Sep 2014, 17:25

Re: Reťazcový vstup pre užívateľa, (od)mocniny v C - Ako na to?

Príspevok od používateľa alvar » 13 Okt 2014, 20:03

Snažil som sa to napísať čo najbližšie k užívateľovi, čiže som to spravil prehľadne ak myslíš toto.. Mysli si čo chceš. Ale jako keď nemáš záujem mi pomôcť, prečo vôbec reaguješ na moju otázku?
0

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Reťazcový vstup pre užívateľa, (od)mocniny v C - Ako na to?

Príspevok od používateľa peterple » 13 Okt 2014, 20:56

Vidím že nikomu sa nechce lúskať cudzí kód, nie to ešte aby tam niečo vytváral na želanie autora. Ak ešte stojíš o radu tak tu máš niečo z wikipédie:

Kód: Vybrať všetko

#include <stdio.h>
 
int main()
{
    char  word[20];
 
    if (scanf("%19s", word) == 1)
        puts(word);
    return 0;
}
Všimni si rozdiel medzi tým čo si poslal ty a ako by to malo byť správne.
No a otestovať načítaný text či sa rovná nejakému stringu už nechám na teba. Smer ktorým máš hľadať som ti napísal dávnejšie.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

alvar
Nový člen
Nový člen
Príspevky: 58
Dátum registrácie: 16 Sep 2014, 17:25

Re: Reťazcový vstup pre užívateľa, (od)mocniny v C - Ako na to?

Príspevok od používateľa alvar » 13 Okt 2014, 21:17

To je celkom nápomocné, ale stále nechápem ako to prepojiť s cyklom do-while :/

Kód: Vybrať všetko

include <stdio.h>
int main()

{
    char koniec[7] = "koniec";

  do {

  program....

 } while(scanf("%7s",koniec) == 1) {
    puts(koniec);
    return 0;
    }

}
Takto by to fungovalo?
0

Hinsi
Pokročilý člen
Pokročilý člen
Príspevky: 510
Dátum registrácie: 15 Sep 2014, 15:56

Re: Reťazcový vstup pre užívateľa, (od)mocniny v C - Ako na to?

Príspevok od používateľa Hinsi » 13 Okt 2014, 21:36

NE NE NE NE NE!!!

STRCMP !! :axe:
0

alvar
Nový člen
Nový člen
Príspevky: 58
Dátum registrácie: 16 Sep 2014, 17:25

Re: Reťazcový vstup pre užívateľa, (od)mocniny v C - Ako na to?

Príspevok od používateľa alvar » 13 Okt 2014, 21:38

?
0

Používateľov profilový obrázok
lubbo7
Pokročilý člen
Pokročilý člen
Príspevky: 628
Dátum registrácie: 06 Mar 2010, 00:00
Bydlisko: TN
Vek: 34

Re: Reťazcový vstup pre užívateľa, (od)mocniny v C - Ako na to?

Príspevok od používateľa lubbo7 » 13 Okt 2014, 21:54

nepochopil som celkom co to ma presne robit, ale ak chces aby to nieco robilo, az pokial nezadas koniec, a potom sa to ukonci, tak toto by malo fungovat:

Kód: Vybrať všetko

#include <stdio.h>

int main()
{
    char koniec[7]="koniec";
    char prikaz[10];
    do{
    printf("toto je telo programu");
    scanf("%s",&prikaz);
    } while (strcmp(koniec,prikaz));
    printf("koniec");

    return 0;
}
btw ten do-while cyklus mas zle
je to takto:

do{
telo cyklu;
}while(podmienka); //za while uz nejdu prikazy ktore sa maju vykonavat!

*ak je to zle, alebo som napisal blbost, opravte ma prosim, tiez sa este len ucim :)
0

Hinsi
Pokročilý člen
Pokročilý člen
Príspevky: 510
Dátum registrácie: 15 Sep 2014, 15:56

Re: Reťazcový vstup pre užívateľa, (od)mocniny v C - Ako na to?

Príspevok od používateľa Hinsi » 13 Okt 2014, 22:05

char koniec nadefinuj jako const, a pak ho v cmpstr přetypuj.
scanf musí vědět o maximální délce pole, takovýhle program je nebezpečný!
0

milanbb
Okoloidúci
Okoloidúci
Príspevky: 47
Dátum registrácie: 17 Nov 2013, 20:12

Re: Reťazcový vstup pre užívateľa, (od)mocniny v C - Ako na to?

Príspevok od používateľa milanbb » 14 Okt 2014, 13:54

alvar napísal:To je celkom nápomocné, ale stále nechápem ako to prepojiť s cyklom do-while :/

Kód: Vybrať všetko

include <stdio.h>
int main()

{
    char koniec[7] = "koniec";

  do {

  program....

 } while(scanf("%7s",koniec) == 1) {
    puts(koniec);
    return 0;
    }

}
Takto by to fungovalo?
Treba dat char koniec[8], aby tam bolo miesto pre 7 znakov a ukoncovaciu nulu. Nacitavanie sa ukonci po siedmich znakoch alebo na prvej medzere.

Ten zvlastny kombinovany cyklus do {} while {} bude treba prepracovat :), to necham na inych.

Hinsiho sprostosti o const a pretypovani ignoruj. Patri to do na prve miesto zoznamu "ako pisat zle programy", nehovoriac o tom, ze deklaracia retazca ako const vobec neznamena, ze sa nejaka funkcia dozvie o dlzke pola. V C nikdy a nikde.
0

Hinsi
Pokročilý člen
Pokročilý člen
Príspevky: 510
Dátum registrácie: 15 Sep 2014, 15:56

Re: Reťazcový vstup pre užívateľa, (od)mocniny v C - Ako na to?

Príspevok od používateľa Hinsi » 14 Okt 2014, 14:30

Hinsiho sprostosti o const a pretypovani ignoruj. Patri to do na prve miesto zoznamu "ako pisat zle programy", nehovoriac o tom, ze deklaracia retazca ako const vobec neznamena, ze sa nejaka funkcia dozvie o dlzke pola. V C nikdy a nikde.
const souvisí s umístěním dat v paměťovém prostoru a s přístupem k těm datům. Ty svý narážky si laskavě strč někam.

Nebo nám tu veřejně vysvětli, k čemu potřebuješ ten konstantní řetězec jako RW překážející někde v RAM, když stačí v ROM.

Pokud ze mě chceš dělat debila, tak nám ten tvůj nesmysl prečo nie const odůvodni. Pokud nevíš k čemu to je, tak neurážej a študuj! Též nám tu můžeš vysvětlit, co keyword const znamená.

PS: Čtení textu ti zjevně činí potíže, const a délku pole jsem nikde do souvislosti nedával, narozdíl od tebe. Proč myslíš, že každá věta je na samostatném řádku? A kdyby si těch potíží se čtením měl víc, reagoval jsem na člena lubbo7.
0

centesco
Nový člen
Nový člen
Príspevky: 73
Dátum registrácie: 14 Feb 2010, 00:00
Bydlisko: NR
Vek: 39
Kontaktovať používateľa:

Re: Reťazcový vstup pre užívateľa, (od)mocniny v C - Ako na to?

Príspevok od používateľa centesco » 14 Okt 2014, 15:01

const souvisí s umístěním dat v paměťovém prostoru a s přístupem k těm datům. Kdybys programoval něco jinýho než nějaký šmudlačiny, tak bys to věděl, takže si laskavě ty svý narážky strč někam.

Nebo nám tu veřejně vysvětli, k čemu potřebuješ ten konstantní řetězec jako RW překážející někde v RAM, když stačí v ROM.
Nikto nikde nepovedal, ze to kompiluje pre nejaky mpu... Pisal, o prikazovom riadku, je zaciatocnik, takze predpokladaj konzolovu aplikaciu a neuvazuj o umiestneni v ROM :idea: Ja by som to tiez dal ako const a potom porovnal cez strcmp, je to bezne pouzivany postup, pokial nie si odchovany na jave alebo c# :) Len to tvoje odovodnenie neplati pre tento pripad.
0

milanbb
Okoloidúci
Okoloidúci
Príspevky: 47
Dátum registrácie: 17 Nov 2013, 20:12

Re: Reťazcový vstup pre užívateľa, (od)mocniny v C - Ako na to?

Príspevok od používateľa milanbb » 14 Okt 2014, 15:04

No dobre, prehliadol som prispevok od lubbo7, reagoval som primarne na iny, ale aj tak pleties piate cez deviate.

Neviem preco sem pleties umiestnenie premennych v takej alebo onakej pamati. O to tu nejde - pochybujem, ze by sa zadana uloha tykala programovania MCU. Verejne vysvetlenie: v priklade bola premenna pouzita vo funkcii scanf, a v ziadnom strcmp (pardon, ty vlastne hovoris o cmpstr), z toho som vychadzal.

Okrem toho, ak by ho zadefinoval ako const, naco by ho pretypovaval, ked strcmp ma obidva vstupne parametre definovane ako const? Mas aj na to nejake genialne vysvetlenie?

Kód: Vybrať všetko

int strcmp(const char *s1, const char *s2);
char koniec nadefinuj jako const, a pak ho v cmpstr přetypuj.
scanf musí vědět o maximální délce pole, takovýhle program je nebezpečný!
Ak si to teda nemyslel tak, ze sa scanf dozvie dlzkou pola z toho const, atk ako si to myslel? Odkial sa to vlastne dozvie? Ja nemam problem s citanim, evidentne mas problem sformulovat myslienku, pokial v nej nie je kazde druhe slovo urazka.

Debila robis zo seba sam. Neser sa do veci, ktorym nerozumies. Programujem 36 rokov - to je skoro dvakrat tolko, ako si na svete. Takze rady o studovani od niekoho, kto pred 5-timi rokmi na forach vyplakaval aky je ten AVR assembler tazky (dam link, aby si zasa mal co premazavat?) su trapne, trapne a trapne.
0

Hinsi
Pokročilý člen
Pokročilý člen
Príspevky: 510
Dátum registrácie: 15 Sep 2014, 15:56

Re: Reťazcový vstup pre užívateľa, (od)mocniny v C - Ako na to?

Príspevok od používateľa Hinsi » 14 Okt 2014, 16:03

Takže na tom const vlastně nic špatného není, dokonce je to správně a žádané. Na x86 to nevadí, jen to učiní program bezpečnějším, na embedded je to vyžadované. Jinak řečeno chyba tam není, takže co si těma narážkama dokazuješ?

Dýlka načítanýho stringu je ve formátovacím řetězci scanf, takový starý pardál, co měří zkušenosti na věk (jak směšné a pošetilé), by to měl vědět.

Nevymlouvej se, že jsi něco přehlédl, ten lubbovo příspěvek tu byl odvčera. Stejně tak jsou trapné ty tvé výmluvy, že jsi něco přehlídl. Trapné, trapné a trapné.
0

alvar
Nový člen
Nový člen
Príspevky: 58
Dátum registrácie: 16 Sep 2014, 17:25

Re: Reťazcový vstup pre užívateľa, (od)mocniny v C - Ako na to?

Príspevok od používateľa alvar » 14 Okt 2014, 17:09

Takže keď som toto napísal, program mi síce ukončilo, ale predtým mi vypísalo tabuľku program prestal pracovať... Prečo mi to vyskakuje? Tu je zjednodušená verzia:

Kód: Vybrať všetko

#include <stdio.h>
int main()
{
    char koniec[8];     // aj keď som napísal char koniec[8] = "koniec"; nešlo to...
    int volba;

 do {
 
    // program s výberovým menu, pričom volba je typu int, čiže len číslicou...
  
} while (volba != strcmp(koniec));

}
0

Používateľov profilový obrázok
Drakoush
Ultimate člen
Ultimate člen
Príspevky: 10964
Dátum registrácie: 07 Feb 2012, 23:22
Bydlisko: Nitra
Vek: 28
Kontaktovať používateľa:

Re: Reťazcový vstup pre užívateľa, (od)mocniny v C - Ako na to?

Príspevok od používateľa Drakoush » 14 Okt 2014, 17:35

Vo vlákne boli dva nahlásené príspevky, no vzhľadom na ich obsah ich ponechávam vo vlákne. Previnilého budeme riešiť na "porade" vedenia fóra. V prípade, ak k tomu nahlasovateľ chce niečo dodať, prosím, aby sa obrátil bud na mňa, alebo niektorého z modov, alebo priamo na administrátora fóra. Za pochopenie ďakujem. Drakoush, 14.10.2014
0
Odkupujem zaujímavé meracie prístroje. Ponuky mailom alebo SS.

milanbb
Okoloidúci
Okoloidúci
Príspevky: 47
Dátum registrácie: 17 Nov 2013, 20:12

Re: Reťazcový vstup pre užívateľa, (od)mocniny v C - Ako na to?

Príspevok od používateľa milanbb » 14 Okt 2014, 17:45

Hinsi napísal:Takže na tom const vlastně nic špatného není, dokonce je to správně a žádané. Na x86 to nevadí, jen to učiní program bezpečnějším, na embedded je to vyžadované. Jinak řečeno chyba tam není, takže co si těma narážkama dokazuješ?

Dýlka načítanýho stringu je ve formátovacím řetězci scanf, takový starý pardál, co měří zkušenosti na věk (jak směšné a pošetilé), by to měl vědět.

Nevymlouvej se, že jsi něco přehlédl, ten lubbovo příspěvek tu byl odvčera. Stejně tak jsou trapné ty tvé výmluvy, že jsi něco přehlídl. Trapné, trapné a trapné.
No dobre, ja som reagoval na iny prispevok ako ty. Prehliadol som ho pri skrolovani dlhej obrazovky. Nevyhovaram sa, uz nie som 21-rocne decko, nepotrebujem to. Dobre, moja chyba.

Ale keby tvoje prispevky mali hlavu a patu a bolo z nich jasne coho sa tykaju, k nedorozumeniu by nedoslo. Fakt je tazke odhadnut, ktory prispevok prave urazas.

A v com chces merat skusenosti? V pocte urazok? Ci sa ti to paci Sixta, alebo nie, 36 rokov programovania je viac, ako 5 rokov smodrchania na nejakom AVR. Proste si nanic programator - to krici z kazdeho tvojho prispevku na temu programovania.

Ale to je jedno - je zrejme, ze moderatori si zelaju dat foru tvoju hnusnu tvar... a pre niektorych si zrejme aj vzorom.

@Drakoush: Ako nahlasovatelovi prispevkov (jeden Hinsiho a jeden moj vlastny), je mi uplne sumafuk co sa s nimi urobi.
0

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Reťazcový vstup pre užívateľa, (od)mocniny v C - Ako na to?

Príspevok od používateľa peterple » 14 Okt 2014, 19:45

Toto sa bude týkať zdrojového kódu ktorý si poslal naposledy.
Nože prezraď v akom prostredí to programuješ? A ten zjednodušený program si testoval. Podľa mňa by ho mal slušný kompilátor neskompilovať. Je vidno že textové reťazce sú pre teba španielska dedina. Nuž čo nejak s nimi treba začať.
Skús si veľmi pozorne prečítať toto:

http://www.jakprogramovat.cz/kurz-c/9-k ... e-s-textem

Možno sa ti z toho podarí niečo pochopiť. Aj keď ten scanf tam majú tiež zle, lebo nešpecifikujú max dĺžku reťazca. Už som ti k tomu posielal návod ale asi to tu zapadlo v informačnom šume.

Potom sa pokús opraviť ten tvoj zjednodušený program aby dokázal otestovať dva textové reťazce

V skratke chyby ktoré tam máš.
1. strcmp má dva parametre a nie jeden - toto musí viesť k chybe prekladu
2. porovnanie voľba != strcmp( ..., ...) síce nevygeneruje chybu ale znamená to úplne niečo iné než s ty predstavuješ. Konkrétne to znamená test: Hodnota ktorá je v premennej volba nerovná sa hodnote ktorú vrátila funkcia strcmp.
3. pole koniec musí byť inicializované nejakým reťazcom. Ak hľadáš dôvod na nejaké abnormálne ukončenie programu tak ho hľadaj práve tu.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

Používateľov profilový obrázok
25majo40
Stály člen
Stály člen
Príspevky: 106
Dátum registrácie: 22 Jún 2013, 12:45
Bydlisko: Takmer Prešov
Vek: 26

Re: Reťazcový vstup pre užívateľa, (od)mocniny v C - Ako na to?

Príspevok od používateľa 25majo40 » 16 Okt 2014, 21:14

Caute nechcem zakladat novu temu tak to pisem tu, chcem sa spytat ci by niekto nevedel naprogramovat alebo aspon pomoct mi s programom v C-cku.

Program by mal nacitat neaky sled pismen a zoradit ich podla abecedy , ale neviem ako na to , nenasiel by sa niekto co ma s tym neake skusenosti ?

tak by som chcel,aby to neako fungovalo
Vstup:
daczt
Vystup:
acdtz
0
Elektronika is my love

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Reťazcový vstup pre užívateľa, (od)mocniny v C - Ako na to?

Príspevok od používateľa peterple » 16 Okt 2014, 21:36

určite vedel. Ale nikto to za teba robiť nebude. Daj si do googla

c sort char array

Pozri si čo sa týka tvojho problému, vyskúšaj a potom sa pýtaj čo nebudeš vedieť.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

Používateľov profilový obrázok
25majo40
Stály člen
Stály člen
Príspevky: 106
Dátum registrácie: 22 Jún 2013, 12:45
Bydlisko: Takmer Prešov
Vek: 26

Re: Reťazcový vstup pre užívateľa, (od)mocniny v C - Ako na to?

Príspevok od používateľa 25majo40 » 16 Okt 2014, 22:00

Vdaka petrple :agree:

nasiel som to co som hladal, ale velmi tomu nechapem nevysvetlil by mi to niekto ?
chapem maximalne tomu, ze je tu napisana funkcia pre vratenie hodnoty a, program zoradi ake kolvek tri pismena , ale co ak by som chcel ten pocet pismen zvacsit , aby bolo jedno kolko znakov slovo obsahuje ?

Kód: Vybrať všetko

#include <stdio.h>
#include <stdlib.h>

int ascending(void const *a, void const *b )
{
	return (*(char*)a - *(char*)b );
}

int main()
{
	char a[] = "FED";
	qsort(a, 3, sizeof(char), ascending);
	printf("%s\n", a);

	return 0;
}
0
Elektronika is my love

centesco
Nový člen
Nový člen
Príspevky: 73
Dátum registrácie: 14 Feb 2010, 00:00
Bydlisko: NR
Vek: 39
Kontaktovať používateľa:

Re: Reťazcový vstup pre užívateľa, (od)mocniny v C - Ako na to?

Príspevok od používateľa centesco » 16 Okt 2014, 22:18

Do tej funcie qsort davas vstupne parametre - buffer, pocet elementov, velkost elementu, callback funkcia na porovnanie... cize do pola "a" nacitas hoc aj z prik. riadku (vid vyssie) a ako pocet elementov pouzijes funckiu strlen(). Podrobnejsie to pisat nebudem, nic by si sa nenaucil :) Treba sa skamaratit s googlom a hladat, hladat...
0

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok