Funkce sscanf – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Funkce sscanf – C / C++ – Fórum – Programujte.comFunkce sscanf – C / C++ – Fórum – Programujte.com

 

Memphis22
~ Anonymní uživatel
7 příspěvků
7. 11. 2010   #1
-
0
-

Ahoj, potřeboval bych poradit s funkcí sscanf.

Mám řetězec typu char a v něm mám uložený čísla - např.: 123 56 8 12
...a potřebuju to (zřejmě pomocí sscanf) dostat do matice - stačí do nějáký proměnný, z tý už to cyklem dostanu do matice - ale netušim jak...pročítal jsem manuály k tomuhle příkazy, díval se na příklady ale nenašel jsem nic co by mi nějak pomohlo...podle nápovědy bych k tomu měl použít konverzi lf nebo n...

Díky za jakoukoliv radu,
M

Nahlásit jako SPAM
IP: 82.208.2.–
Blujacker
~ Moderátor
0
Grafoman
7. 11. 2010   #2
-
0
-

Jestli se ten dotaz týká čtvrté bonusové úlohy na progtestu, tak doporučují použít klasicky scanf v cyklu + pomocí návratové hodnoty funkce getc(stdin) kontrolovat jestli uživatel stiskl enter...

Co se týče sscanf, tak bohužel nejsem schopen pomoci...

Nahlásit jako SPAM
IP: 84.42.166.–
Navštivte server Matematika pro každého
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
Memphis22
~ Anonymní uživatel
7 příspěvků
8. 11. 2010   #3
-
0
-

Jj, přesně toho se to týká - díky moc za radu - zkusím to.
M

Nahlásit jako SPAM
IP: 147.32.223.–
KIIV
~ Moderátor
+43
God of flame
8. 11. 2010   #4
-
0
-

jestli sou to ty obdelniky tak sem to resil nactenim radku a pak sscanf a "%d%d%d%d" - navratova hodnota musi byt 4 jako ze byly nacteny vsechny polozky

Nahlásit jako SPAM
IP: 77.237.136.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Memphis22
~ Anonymní uživatel
7 příspěvků
8. 11. 2010   #5
-
0
-

Obdelníky ne...je to ten řešič soustavy lineárních rovnic.
Už to mám skoro hotový, jen nevim proč mi nechce scanf nikdy přečíst první znak...když zadám "1 2 3" tak do matice uloží jen 2 a 3 kdežto když zadám " 1 2 3" tak to uloží i s jedničkou.

Nahlásit jako SPAM
IP: 195.113.242.–
KIIV
~ Moderátor
+43
God of flame
8. 11. 2010   #6
-
0
-

tak neco delas pred tim co bys nemel
nejakej getc nebo podobne

Nahlásit jako SPAM
IP: 77.237.136.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Memphis22
~ Anonymní uživatel
7 příspěvků
8. 11. 2010   #7
-
0
-

jo - getc tam mám:

for(i=0;i<22;i++){
if(getc(stdin)=='\n') break;
scanf("%f",&m[0][i]);
}

Nahlásit jako SPAM
IP: 195.113.242.–
KIIV
~ Moderátor
+43
God of flame
8. 11. 2010   #8
-
0
-

tak se vsad ze kdyz das treba 345 2 4 5 tak dostanes "45 2 4 5" :)
dej spis za scanf

Nahlásit jako SPAM
IP: 77.237.136.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Memphis22
~ Anonymní uživatel
7 příspěvků
8. 11. 2010   #9
-
0
-

Bezva - už to i funguje...ale když to dám do dalšího cyklu (protože pole je dvojrozměrný), tak to správně funguje jen pro první řádek...na každym dalším to zas vynechá první znak. Je to problém toho getc? Kdybych věděl proč to vynechává, možná bych to zvládl nějak spravit.
M

for(j=0;j<22;j++){
for(i=0;i<22;i++){
scanf("%f",&m[j][i]);
if(getc(stdin)=='\n') break;
}
if (getc(stdin)==EOF) break;
}

Nahlásit jako SPAM
IP: 82.208.2.–
KIIV
~ Moderátor
+43
God of flame
8. 11. 2010   #10
-
0
-


if (getc(stdin)==EOF) break;

todle bude duvod
spis si uloz ten predchozi a ten pak otestuj na eof

Nahlásit jako SPAM
IP: 77.237.136.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Memphis22
~ Anonymní uživatel
7 příspěvků
9. 11. 2010   #11
-
0
-

Uložit si předchozí přečtenej znak? Já přece potřebuju dát konec, když poslední přečtenej znak bude EOF, ne? nebo spíš...předchozí znak nikdy nebude EOF, ne? protože když dám EOF tak je prostě konec čtení, ne?

Nahlásit jako SPAM
IP: 195.113.242.–
KIIV
~ Moderátor
+43
God of flame
9. 11. 2010   #12
-
0
-

jenze ty takhle nactes \n a po preruseni vnoreneho cyklu pak delas jeste nacteni dalsiho znaku ktery se musi rovnat EOF...
takhle se zbavis jednoho znaku na konci tj \n a pak se jeste zbavis dalsiho znaku na zacatku radku nasledujiciho...

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Nullpointerexception
~ Anonymní uživatel
1 příspěvek
10. 11. 2010   #13
-
0
-

To Memphis22 : getc nacte a otestuje znak. Pri dalsim cteni ze stdin (priklad pomoci scanf) se uz cte dalsi znak, nikoli ten co byl testovan pomoci getc.

Nahlásit jako SPAM
IP: 195.113.242.–
Memphis22
~ Anonymní uživatel
7 příspěvků
11. 11. 2010   #14
-
0
-

Díky všem co poradily :-)

Trvalo to, ale poté co jsem díky vám zjistil, kde je problém jsem to vyřešil funkcí ungetc().

M :-)

Nahlásit jako SPAM
IP: 195.113.242.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 96 hostů

Moderátoři diskuze

 

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