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

Prosím o radu – C / C++ – Fórum – Programujte.comProsím o radu – C / C++ – Fórum – Programujte.com

 

dave3++
~ Anonymní uživatel
1 příspěvek
10. 1. 2008   #1
-
0
-

Zdravim!
Mám problém s jedním úkolem (viz níže). Program pracuje správně do té doby než se do vstupních hodnot zadá: a b c. Překopíruje to pouze čtverečky. Přitom s velkými písmeny to funguje. Neporadil by mi někdo? Už fakt nevím co s tím. Předem díky!!!

/*
Příklad 46
Program přepisuje slova, každé třetí vynecháva, přičemž slova od sebe rozezná
pomoci mezer
*/



#include <stdio.h>


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

FILE *vstup,*vystup;
char c,slovo[256];
int znaky=0,pocet_slov=0;

slovo[0]='\0';



/*overeni argumentu*/
if(argc != 3)
{
printf("Chybný počet argumentů !\n");
system("PAUSE");
exit(1);
}


/* otevřu zdrojový soubor */
if((vstup=fopen(argv[1],"r"))==NULL)
{
printf("Nepodařilo se otevřít zdrojový soubor !\n");
system("PAUSE");
exit(1);
}

/* vytvořím cílovy soubor */
if(vystup=fopen(argv[2],"r"))
{
printf("Cílový soubor existuje, spusťte program s jiným parametrem cílového souboru !\n");
system("PAUSE");
exit(1);
}
else
{
if((vystup=fopen(argv[2],"w"))==NULL)
{
printf("Cílový soubor se nepovedlo vytvořit !\n");
system("PAUSE");
exit(1);
}
}

/* čtu soubor po znacích */
while((c=fgetc(vstup)) != EOF)
{

/* když je to mezera */
if( c == ' ' )
{
pocet_slov++;

/* zapisuju slovo, pokud neni třetím */
if( pocet_slov == 3 )
{
pocet_slov = 0;
}
else
{
slovo[znaky] = ' ';
slovo[znaky+1]='\0';
fputs(slovo,vystup);
}

/* vynuluji slovo a délku znaku */
znaky=0;
slovo[0]='\0';
}
else
{
slovo[znaky] = c;
znaky++;
if (znaky>250) znaky=250;
}
}
if( pocet_slov != 2 )
{
slovo[znaky] = '\0';
fputs(slovo,vystup);
}

/* uzavřu oba soubory */
fclose(vystup);
fclose(vstup);

system("PAUSE");
return 0;
}



Nahlásit jako SPAM
IP: 88.101.15.–
Payne
~ Anonymní uživatel
37 příspěvků
11. 1. 2008   #2
-
0
-

Mas to celkovo divne pisane...

1. kukni si jeden riadok, zrejme si tam chcel dat toto :
/* vytvořím cílovy soubor */
if((vystup=fopen(argv[2],"r")) != NULL) {
...

2. toto s tym osetrenim, ze len ked sa tam subor nenachadza mi pride velmi divne...

3. vobec nechapem na co je tam kus kodu ze :
if( pocet_slov != 2 ) {
slovo[znaky] = '\0';
fputs(slovo,vystup);
}

a taktiez na co je dobre
if (znaky>250)
znaky=250;

4. nasledovna vec nie je vobec nutne pisat ... slovo[0]='\0';

5. celkovo mas zle napisanu logiku, lebo ono ti to nemusi dobre pisat slova z toho dovodu, ze ked zadas napr. 3 slova, ale za poslednym nedas medzeru, tak ti vsetky tri vypise...
slova treba osetrovat na prazdne znaky a nie len na medzeru...

Taze upraveny program, inak funkcny nie len pod win ako tvoj je tu:

#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: 87.244.219.–
zacatecnik0
Super člen
11. 1. 2008   #3
-
0
-

to dave3++: kde jste vzal zadani tech prikladu?

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ů
11. 1. 2008   #4
-
0
-

To zacatecnik : Je to úkol do školy.
To Payne: Díky !!!!

Nahlásit jako SPAM
IP: 88.101.15.–
Payne
~ Anonymní uživatel
37 příspěvků
11. 1. 2008   #5
-
0
-

Rado sa stalo

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

Podobná vlákna

Prosím o radu! :) — založil brunoczech

Prosím o radu !!! — založil ospalka123

Prosím o radu — založil Michal

Prosím o radu — založil orei

Prosím o radu — založil majkl

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ý