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;
}
Fórum › C / C++
Prosím o radu
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;
}
to dave3++: kde jste vzal zadani tech prikladu?
To zacatecnik : Je to úkol do školy.
To Payne: Díky !!!!
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
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