Witam, mam problem ze ‘zjadaniem’ przez program liter/znaków, jeśli zamieniam na wejściu np. literę “a” lub “A” (tak, jak w programie), tak aby na wyjściu otrzymać zamiast niej “44”, to mam takie cudo:
Wszystko spoko, tylko jak na wejściu dam “Witam cie”, to na wyjściu otrzymuje “Wit44 cie” - pożarło “m”, czyli następną po tej literze “a” literę.
Tak samo, gdybym zrobił z “a” lub “A” na wyjściu “444”:
na wejściu “Witam cie”, to na wyjściu dostaję “Wit444cie” - pożarło 2 następne litery, po literze “a”.
Pomyślałem nawet o tym, żeby zwiększać wtedy długość znaków:
dl+=3;
ale to jedynie zwiększa plik na końcu o 3 spacje, czyli otrzymamy: "Wit44 cie " i odpowiednio ""Wit444cie ".
W kod się nie wgłębiałem bo jest nieczytelny (stosuj wcięcia, nazywaj zmienne bardziej opisowo, komentuj gdzie trzeba, kod umieszczaj wewnątrz ‘code’ na forum), ale jeśli długość napisu nie jest znana w czasie kompilacji trzeba użyć dynamicznej alokacji (malloc).
for ma 3 zasadnicze części oddzielone średnikami: for(1; 2; 3), jeśli chcesz aby w 1 i 3 znalazło się więcej operacji, oddziel je operatorem , (przecinek).
No i zaoszczędziłeś mi kilkanaście minut życia, dzięki za podpowiedź, wszystko działa .
– Dodane 08.01.2011 (So) 17:00 –
Proszę mi jeszcze powiedzieć, czy jest jakiś sposób, żeby program czytał większe pliki? Chodzi o to, że teraz mogę wczytać plik, który zawiera łącznie max. 127 znaków:
#include
#include
int il(char lol[])
{
int tmp=1;
int i;
for(i=0; i<127; i++)
{
if(lol[i]==' ' && lol[i+1]==' ')
{
tmp=i;
break;
}
}
return tmp;
}
int main()
{
char zd[127];
int i;
int j;
for(i=0; i<127; i++)
zd[i]=' ';
int dl=0;
FILE *fptr;
fptr=fopen("a.txt", "r");
i=1;
while(fgets(zd,127,fptr)!=NULL);
fclose(fptr);
dl=il(zd);
int ndl=0;
for(i=0; i
{
if(zd[i]=='a' || zd [i]=='A')
{
ndl++;
}
}
char nzd[dl+ndl];
for(i=0, j=0; i
{
if(zd[i]=='a' || zd [i]=='A')
{
nzd[j]='4';
j++;
nzd[j]='4';
}
else
{
nzd[j]=zd[i];
}
}
FILE *fp;
fp=fopen("b.txt", "w");
for(i=0; i
fprintf (fp, "%c", nzd[i]);
fclose (fp);
return 0;
}
Z tego co pamiętam, char ma do 127, więc tak też ustawiłem (już przy 128 program nie chodził). Próbowałem też zamienić wszystkie char na unsigned char (który ma chyba do 255), ale nic z tego.
Jest jakiś sposób na ‘obejście tego’? Chciałbym, żeby chociaż trochę większe pliki mi obsługiwał…