Stránka: 1 z 1
| [ Príspevkov: 13 ] | |
| Autor | Správa |
|---|
Registrovaný: 19.06.12 Prihlásený: 11.12.17 Príspevky: 132 Témy: 20 | 20 |
Zdravim, existuje funkcia, ktora precita zo stdin znak(skupinu znakov) a vrati "kurzor" na zaciatok ?
dakujem
_________________ Lenovo IdeaPad G580 *Intel Core i3-2310M 2.10GHz * 4GB RAM * Nvidia GeForce 610M 1GB * 500GB HDD SATA * Windows 10 64-bit || Ubuntu 14.04 |
|
Registrovaný: 13.11.07 Prihlásený: 20.08.16 Príspevky: 1702 Témy: 0 | 0 |
Nie. Môžeš vyskúšať zobraziť znak "\r", to ale funguje len v niektorých termináloch.
|
|
Registrovaný: 27.12.08 Prihlásený: 13.12.22 Príspevky: 1874 Témy: 96 | 96 Bydlisko: Bratislava,... |
ak chces viackrat citat ten isty riadok, tak si to nacitaj do string-u (fgets) a potom citaj z toho string-u kolkokrat chces (sscanf) znak '\r' je skor uzitocny pri vypisovani na prepisanie posledneho riadka a vo vacsine linux-ovych terminalov to funguje, na windows-e som neskusal...
_________________ ~Listen to your brain, not your heart~ NB1: Lenovo Y500: CPU: Intel Core i7-3630QM; GPU: nVidia GT650M 2GB SLi; RAM: 16GB DDR3; HDD: 1TB + 256GB SSD (m4); LCD: 15,6" 1920x1080; OS: Win8.1 64-bit + Arch Linux 64-bit (UEFI Powered DualBoot) NB2: Asus K53SJ-SX093: CPU: Intel Core i3-2310M; GPU: Intel HD3000 / nVidia GT520M 1GB Optimus; RAM: 8GB DDR3; SSD: 128GB 840Evo; LCD: 15,6" 1366x768; OS: Win 8.1 Pro 64-bit (UEFI) |
|
Registrovaný: 19.06.12 Prihlásený: 11.12.17 Príspevky: 132 Témy: 20 | 20 |
nBXXL: stringu som sa chcel vyhnut pretoze zadanie je nieco v zmysle ze na vstupe je n*n prvkova matica (n<=10 000) a viem ze jeden zo vstupov bude obsahovat \n na zaciatku a to by som mal spravne vyhodnotit ako zly vstup, preto som dufal ze precitam prvy znak a ak nieje LF tak to zacnem citat znovu... chrono: neviem ci som to \r dobre pochopil, napisal som to takto a nefunguje mi to na Xubuntu : Kód: scanf("%c",&c); printf("\r"); scanf("%d",&matica[0]);
_________________ Lenovo IdeaPad G580 *Intel Core i3-2310M 2.10GHz * 4GB RAM * Nvidia GeForce 610M 1GB * 500GB HDD SATA * Windows 10 64-bit || Ubuntu 14.04 |
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | 3 |
\r ti pri čítaní nepomôže. Prečo by si to chcel čítať znovu? Veď prečítaš prvý znak a ak to nebude LF, tak budeš jednoducho pokračovať. Ak to bude LF, skončíš a vyhlásiš zlý vstup.
btw. na prečítanie znaku máš lepšiu funkciu - getchar()
_________________ Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám! |
|
Registrovaný: 19.06.12 Prihlásený: 11.12.17 Príspevky: 132 Témy: 20 | 20 |
ano, lenze ak ten prvy znak nebude LF, tak ten znak musim pouzit ako integer ktory nemusi byt <10, teda by som musel po znakoch hladat medzeru a vsetko medzi tym spracovat do cisla priklad vstupu: Kód: \n 512 2 3 6 5 48
alebo Kód: 512 2 3 6 5 48
_________________ Lenovo IdeaPad G580 *Intel Core i3-2310M 2.10GHz * 4GB RAM * Nvidia GeForce 610M 1GB * 500GB HDD SATA * Windows 10 64-bit || Ubuntu 14.04 |
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | 3 |
Noa? A nevieš načítať číslo po znakoch? Píšem z hlavy: Kód: int num = 0; while(1) { char c = getchar(); //nacitam znak if( c == '\n' ) return "zly vstup"; //ak je to \n, tak nieco urobim, napr vyhlasim zly vstup, pripadne sa posuniem na novy riadok atd.
if( c == ' ' ) //ak je to medzera, cislo si ulozim/vypisem a zresetujem { print num; num = 0; continue; }
//nie je to ani \n ani medzera, takze je to cifra, pripocitam ju num = (num*10) + (c - '0'); }
_________________ Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám! |
|
Registrovaný: 19.06.12 Prihlásený: 11.12.17 Príspevky: 132 Témy: 20 | 20 |
jasne ze viem, len som chcel vediet ci sa to neda citat znovu aby to bolo jednoduchsie, nic viac
_________________ Lenovo IdeaPad G580 *Intel Core i3-2310M 2.10GHz * 4GB RAM * Nvidia GeForce 610M 1GB * 500GB HDD SATA * Windows 10 64-bit || Ubuntu 14.04 |
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | 3 |
V podstate dá, ale nikdy to nerob, kým skutočne nemusíš. V tomto prípade nemusíš. Dalo by sa to napríklad funkciou fseek na stdin. Ale nebude to jednoduchšie.
_________________ Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám! |
|
Registrovaný: 19.06.12 Prihlásený: 11.12.17 Príspevky: 132 Témy: 20 | 20 |
takze predsa existuje funkcia, ktora robi presne co potrebujem ... ungetc() toto uplne splna moje poziadavky: Kód: c=getchar(); if (c=='\n') printf("LF\n"); ungetc(c,stdin); scanf("%d",&k);
_________________ Lenovo IdeaPad G580 *Intel Core i3-2310M 2.10GHz * 4GB RAM * Nvidia GeForce 610M 1GB * 500GB HDD SATA * Windows 10 64-bit || Ubuntu 14.04 |
|
Registrovaný: 27.12.08 Prihlásený: 13.12.22 Príspevky: 1874 Témy: 96 | 96 Bydlisko: Bratislava,... |
dobre vediet.. ungetc som nepoznal anyway, ungetc robi to co potrebujes ale nie to, co si pozadoval v zadani (vratit kurzor naspat na zaciatok riadku)..., s tym string-om som to myslel takto: Kód: char s[128] buffer; gets(buffer); if (buffer[0] == '\n') printf("LF\n"); sscanf(buffer, "%d", &k); // dalsie riadky uz mozes citat normalne zo scanf
sscanf sa pouziva rovnako ako scanf, akurat necita zo standardneho vstupu ale zo string-u ktory mu zadas ako prvy parameter.., a pomocou sscanf mozes z jedneho string-u citat kolkokrat chces (teda doslova vratit kurzor na zaciatok riadku(stringu)..)
_________________ ~Listen to your brain, not your heart~ NB1: Lenovo Y500: CPU: Intel Core i7-3630QM; GPU: nVidia GT650M 2GB SLi; RAM: 16GB DDR3; HDD: 1TB + 256GB SSD (m4); LCD: 15,6" 1920x1080; OS: Win8.1 64-bit + Arch Linux 64-bit (UEFI Powered DualBoot) NB2: Asus K53SJ-SX093: CPU: Intel Core i3-2310M; GPU: Intel HD3000 / nVidia GT520M 1GB Optimus; RAM: 8GB DDR3; SSD: 128GB 840Evo; LCD: 15,6" 1366x768; OS: Win 8.1 Pro 64-bit (UEFI) |
|
Registrovaný: 19.06.12 Prihlásený: 11.12.17 Príspevky: 132 Témy: 20 | 20 |
ano, mas pravdu ze to nevracia kurzor ale riesi to moj problem, ktory som nizsie popisal, ale to je jedno teraz
viem jak si to myslel tym stringom len tak som to nechcel robit preto lebo som nevedel aky dlhy bude vstup, mohlo tam byt 1500 3-cifernych cisel napr...
_________________ Lenovo IdeaPad G580 *Intel Core i3-2310M 2.10GHz * 4GB RAM * Nvidia GeForce 610M 1GB * 500GB HDD SATA * Windows 10 64-bit || Ubuntu 14.04 |
|
Registrovaný: 27.12.08 Prihlásený: 13.12.22 Príspevky: 1874 Témy: 96 | 96 Bydlisko: Bratislava,... |
still ak su to len cisla oddelene medzerami tak sa to da poriesit cez strtok a itoa.... just sayin.. 
_________________ ~Listen to your brain, not your heart~ NB1: Lenovo Y500: CPU: Intel Core i7-3630QM; GPU: nVidia GT650M 2GB SLi; RAM: 16GB DDR3; HDD: 1TB + 256GB SSD (m4); LCD: 15,6" 1920x1080; OS: Win8.1 64-bit + Arch Linux 64-bit (UEFI Powered DualBoot) NB2: Asus K53SJ-SX093: CPU: Intel Core i3-2310M; GPU: Intel HD3000 / nVidia GT520M 1GB Optimus; RAM: 8GB DDR3; SSD: 128GB 840Evo; LCD: 15,6" 1366x768; OS: Win 8.1 Pro 64-bit (UEFI) |
|
Stránka: 1 z 1
| [ Príspevkov: 13 ] | |
|