Chybný výstup programu – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Chybný výstup programu – C / C++ – Fórum – Programujte.comChybný výstup programu – C / C++ – Fórum – Programujte.com

 

homer4
~ Anonymní uživatel
2 příspěvky
21. 1. 2008   #1
-
0
-

Zdravim. M8m problém s jedním programem. Má to přepisovat text z jednoho souboru do druhého. Vše funguje do té doby, než se do vstupního textu zadjí tři znaky (např. a b c). Překopíruje to pouze čtverečky. Myslím že chyba bude někde v tom slovo[znaky+1]='\0'; ale nevím co s tim?

#include <stdio.h>

#include <stdlib.h>



int main(int argc,char *argv[])

{

FILE *vstup,

*vystup;

char c,

slovo[256];

int znaky=0,

pocet_slov=0,

slova;



/*overeni argumentu*/

if(argc != 3) {

printf("Chybny pocet argumentu !\n");

fflush(stdin);

getchar();

exit(1);

}



/* otevřu zdrojový soubor */

if((vstup=fopen(argv[1],"r"))==NULL) {

printf("Nepodarilo se otevrit zdrojovy soubor !\n");

fflush(stdin);

getchar();

exit(1);

}



/* vytvořím cílovy soubor */

if((vystup=fopen(argv[2],"r")) != NULL) {

printf("Cilovy soubor existuje, spustte program s jinym parametrem cilového souboru !\n");

fflush(stdin);

getchar();

exit(1);

}



else {

if((vystup=fopen(argv[2],"w"))==NULL) {

printf("Cilovy soubor se nepovedlo vytvorit !\n");

fflush(stdin);

getchar();

exit(1);

}

}



/* čtu soubor po znacích */

while((c=fgetc(vstup)) != EOF) {

/* když je to mezera */

if( c == ' ' || c == '\n' || c == '\t') {

if (slova == 1) {

pocet_slov++;



/* zapisuju slovo, pokud neni třetím */

if ((pocet_slov % 3) != 0) {

slovo[znaky] = ' ';

slovo[znaky+1]='\0';

fputs(slovo,vystup);

}

}

/* vynuluji délku znaku */

znaky = 0;

slova = 0;

}

else {

slovo[znaky] = c;

znaky++;

slova = 1;

}

}



/* uzavřu oba soubory */

fclose(vystup);

fclose(vstup);



fflush(stdin);

getchar();

return 0;

}

Nahlásit jako SPAM
IP: 88.101.15.–
zacatecnik0
Super člen
22. 1. 2008   #2
-
0
-

mnoho lidi vam neodpovedelo protoze asi mate rozsypanej kod, v cem ste to psal?

Prikladam do prilohy upraveny kod (vzhledove)
a pokladam otazku proc tam mate:

  if(argc != 3) {

kdyz ocividne pracujete s dvema parametry, alespon tak jsem to pochopil
zdrojovy soubor - 1. parametr
cilovy souobr - 2. parametr

Nahlásit jako SPAM
IP: 88.100.84.–
Můj blog http://www.zacatecnik.wu.cz[br]Překládám anglickou knihu o wxWidgets http://wxwidgets.hustej.net
Payne
~ Anonymní uživatel
37 příspěvků
22. 1. 2008   #3
-
0
-

Ach jaj a takto to dopadne ked radi, kto ani sam nema sajnu...

Samozrejme ze argc udava pocet parametrov, lenze treba mysliet, ze 1. je vzdy to, ako sa program spusti... Cize v tomto chyba urcite nieje...

A inak ja som tento program vyssie spravil a mne ide v poho aj pod win a aj pod linuxami...

Nahlásit jako SPAM
IP: 87.244.219.–
homer4
~ Anonymní uživatel
2 příspěvky
22. 1. 2008   #4
-
0
-

To Payne : Pouštím to přes dávku a pokaždé mi to vyhodí ty čtverečky. Bylo mi řečeno, že to program vypíše, když je chybný výstup nebo něco v tom smyslu. Prostě neznámé znaky. Odzkoušel jsem to na několika počítačích a nechodí to....

Nahlásit jako SPAM
IP: 88.101.15.–
zacatecnik0
Super člen
22. 1. 2008   #5
-
0
-

jj radi ten kdo nema sajnu nebo ten kdo v C dlouho nedelal. nebo vy si snad pamatujete uplne vse co jste se kdy naucil? :smile1:
a pokud chcete argumentovat ze args jsou zaklad, ktery nelze zapomenout v tom pripade se omlouvam ze sve selhani a muzete dal srazet moji snahu nezistne pomahat :smile1:

ad homer4: spoustite teda main.exe a.txt b.txt? Do b.txt mi to vsak nic nezapise, podival bych se na to bliz, ale mam tu nainstalovane jen Code::Blocks a tam se momentalne snazim rozject debuggovani

Nahlásit jako SPAM
IP: 88.100.84.–
Můj blog http://www.zacatecnik.wu.cz[br]Překládám anglickou knihu o wxWidgets http://wxwidgets.hustej.net
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
22. 1. 2008   #6
-
0
-

To zacatecnik : Jsem rád za každou pomoc :) Spouštím to přesně tak... a jak sem řekl, do b.txt mi to místo a b c překopíruje poze nesmyslné znaky ⁡⁢⁡⁢⁡... já nejsem v céčku žádný profík, ale nechápu jaktože to někomu chodí a někomu ne :smile11:

Nahlásit jako SPAM
IP: 88.101.15.–
mephi0
Expert
22. 1. 2008   #7
-
0
-

naozaj zaujimava chyba, nedalo mi to a tak som sa hral. Výstup v podobe neznámich znakov sa dá prečítať vo worde, aspoň u mňa. Neviem prečo to notepad nezobrazí. Je tu nejaký problém s výstupom znak medzera znak medzera ... Bude to zrejme nejaky low-level problem, tak to neriešme, tip ako to obísť:
[code
]if ((pocet_slov % 3) != 0)
{
slovo[znaky]= '\0';
fputs(slovo,vystup);
fputs("\n",vystup);
}


možno ide o nejake kodovanie, ale ďalej som sa bohuzial nedopatral, snaď to takto stači.

Nahlásit jako SPAM
IP: 85.248.56.–
Program nemusi fungovat rychle, staci ze funguje dostatecne rychle.
trp
~ Anonymní uživatel
5 příspěvků
23. 1. 2008   #8
-
0
-

To mephi : C++ neni muj obor ale priklonil bych se k tvemu tvrzeni ze problem bude v kodovani..

BTW u me na XP po prekladu VIsualStudiem 2005 funguje ten puvodni kod spravne :)

Nahlásit jako SPAM
IP: 194.213.32.–
trp
~ Anonymní uživatel
5 příspěvků
23. 1. 2008   #9
-
0
-

tak me napada ze kdyz u me funguje muze to byt tim ze sem pouzil #include "stdafx.h"

Nahlásit jako SPAM
IP: 194.213.32.–
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, 48 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ý