Fscan r+, vypsat slovo a vypsané slovo změnit – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Fscan r+, vypsat slovo a vypsané slovo změnit – C / C++ – Fórum – Programujte.comFscan r+, vypsat slovo a vypsané slovo změnit – C / C++ – Fórum – Programujte.com

 

mader0
Duch
8. 2. 2015   #1
-
0
-

Zdravím,

jsem naprostý začátečník a řešení na netu jsem vůbec nenašel, škola stojí za houby, takže nás nic nenaučili.

Chci se zeptat, jak napsat kód, aby mi vypsalo slovo ze slovníku a následně to slovo změnilo, viz kód:

FILE *file= fopen("s.txt", "r+");

while(fscanf(file, "%s", slovo) != EOF)

{
             printf("stav: %s\n", &slovo); //vypíše aktuální slovo
             fprintf(file, "1");                     //změní aktuální slovo na jedničku - nefunguje, jak to jednoduše udělat?

}

děkuji

m

Nahlásit jako SPAM
IP: 178.162.199.–
KIIV
~ Moderátor
+43
God of flame
8. 2. 2015   #2
-
0
-

jednoduse to budes kopirovat slovo za slovem a to, ktery chce zmenit zmenis

Nahlásit jako SPAM
IP: 94.113.95.–
Program vždy dělá to co naprogramujete, ne to co chcete...
mader0
Duch
9. 2. 2015   #3
-
0
-

#2 KIIV
no dobře, tomu rozumím, ale jak konkrétně to v tom souboru dané, vypsané slovo změnit?

Mám už celý kód skoro napsaný, jen toto mi chybí.

Nahlásit jako SPAM
IP: 212.111.29.–
KIIV
~ Moderátor
+43
God of flame
9. 2. 2015   #4
-
+1
-
Zajímavé

proste r+ otevre soubor jen pro cteni a zapis na konec.. takze ctes od zacatku, zapisujes az za nej.

Abys mohl zmenit slovo nekde prubezne, tak musis bud vsechno nacist, zmenit konkretni polozku a pak vsechno zapsat, nebo otevrit jeden pro cteni, druhej soubor pro zapis a kopirovat do nej co nactes (plus podminka, co si to chtel najit a vypsat misto toho co tam chces doopravdy mit)

Nahlásit jako SPAM
IP: 94.113.95.–
Program vždy dělá to co naprogramujete, ne to co chcete...
9. 2. 2015   #5
-
0
-

Drobná pozn.: když původní soubor nesmažeš, ale jen ho přejmenuješ, existuje možnost vzít změnu zpět - soubor se změnami přejmenuješ nebo odstraníš a původnímu souboru vrátíš jeho jméno.

hu

Nahlásit jako SPAM
IP: 2001:67c:1222:800:e50d:3a...–
mader0
Duch
9. 2. 2015   #6
-
0
-

#4 KIIV
takže musím celý kód změnit, abych vyřešil jen tuto jednu věc? Tak na to se vys....

To fakt C umí daný stream jen vypsat, nikoliv přepsat? Mi přijde nelogické, že umí perfektně string vypsat, ale přepsat "fputs" už neumí.

Každopádně díky za radu, máš ode mě plus :)

Nahlásit jako SPAM
IP: 212.111.29.–
KIIV
~ Moderátor
+43
God of flame
9. 2. 2015   #7
-
0
-

#6 mader
no kdyz bys to nahrazoval za stejne dlouhe slovo, tak by se to v souboru dalo prepsat primo (s rw a musel bys samozrejme skocit zpet na zacatek slova pred samotnym zapisem), ale jak budes muset zbytek souboru posunout, tak uz to musis delat slozite

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
mader0
Duch
9. 2. 2015   #8
-
0
-

#7 KIIV
přesně o to mi jde, přepsat pouze "0" na "1"

prostě vůbec nevím, jak na to, a to mám celý slovní fotbal už jinak vyřešený

FILE *file= fopen("s.txt", "r+");

while(fscanf(file, "%s", slovo) != EOF)

{
             printf("stav: %s\n", &slovo); //vypíše aktuální slovo
             fputs("1", file);                     //změní aktuální slovo na jedničku - nefunguje

}

a rw+ mi nezničí celý soubor?

Nahlásit jako SPAM
IP: 212.111.29.–
KIIV
~ Moderátor
+43
God of flame
9. 2. 2015   #9
-
0
-

Ted teda moc nechapu, proc potrebujes prepisovat slova na slovni fotbal uvnitr souboru. Ale budiz, treba vis co delas.

A rw neznici soubor, otevre ho pro cteni i zapis. Takovy w by soubor samozrejme vycistilo.

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
mader0
Duch
9. 2. 2015   #10
-
0
-

#9 KIIV
potřebuju dát příznak, že slovo bylo už použito

jaký je tedy příkaz, toto asi ne, že?

Vypsané slovo "0" chci změnit na "1", vypíše to správně, ale jak to změnit?

FILE *file= fopen("s.txt", "rw+");

while(fscanf(file, "%s", slovo) != EOF)

{
             printf("stav: %s\n", &slovo); //vypíše aktuální slovo
             fputs("1", file);                     //změní aktuální slovo na jedničku

}

Nahlásit jako SPAM
IP: 212.111.29.–
9. 2. 2015   #11
-
-1
-
Mimo téma

potřebuju dát příznak, že slovo bylo už použito

soubor na jedno použití?

Jinak pokud čteš soubor po řadě, od začátku, tak použité = přečtené. Polohu "kurzoru" v souboru lze měnit pomocí fseek.

hu

Edit: není to mimo - použitá slova označíš v souboru. To označení tam zůstane i po ukončení programu. Každé další spuštění programu má tedy více omezenou slovní zásobu, což může vést i ke stavu, že nemá žádnou. Co pak? Nahrát nový soubor?

Vhodnější by bylo si ukládat použitá slova buď do paměti a nebo do dočasného souboru. Pak vybírat slova způsobem "začíná na písmeno.. a není v seznamu použitých". Elegantní by bylo použití databáze s tabulkou slov a dočasnou tabulkou použitých slov. 

Nahlásit jako SPAM
IP: 2001:67c:1222:800:e50d:3a...–
9. 2. 2015   #12
-
+1
-
Zajímavé

Ještě jsem si všiml výpisu slovo. Jestliže se jedná o C-čkový řetězec, pak identifikátor slovo představuje char*, tudíž printf("%s\n", slovo);

hu

Nahlásit jako SPAM
IP: 2001:67c:1222:800:e50d:3a...–
mader0
Duch
9. 2. 2015   #13
-
0
-

#12 hlucheucho
no dobře, ale jak to tedy přesně napsat (místo otazníků), aby vypsané slovo změnil na požadované?

=====

FILE *file= fopen("s.txt", "rw+");

while(fscanf(file, "%s", slovo) != EOF)

{
             printf("stav: %s\n", &slovo);
             ???????

}

=====

skript samozřejmě jinak funguje bez chyb

Nahlásit jako SPAM
IP: 212.111.29.–
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, 13 hostů

Podobná vlákna

Dvoubajtové slovo — založil AlexJacobson

Slovo v proměnné — založil Nadšenec

Nahradenie slovo inym — založil josa

Nejkratší slovo ve větě. — založil JaNevimCoDelat

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ý