Dostanie sie do bezpośredniego znaku w char i edytowanie go (C)

0

Witam czy jest możliwośc np w zmiennej char="alela [ lulale" jest możliwosć dostania sie do '[' i edytowanie go np na '\n' ?
z góry dziekuje za pomoc

0

Tak, np. pobierając wskaźnik do niego używając strchr.

0

Ale jak mam to w zmiennej gdzie wszystko zapisalo sie w t[1] bo są to znaki wczytane z pliku za pomoca fscanf to tez sie jakos da?

0

Jeżeli t to tablica, to jakim cudem "wszystko" mogło się zapisać w jednym elemencie tablicy charów? Mowa o t[1].

0

Chętnie bym pomógł, ale nie opisałeś problemu na tyle dobrze żeby dało się Ci sensownie odpowiedzieć.

Aczkolwiek bezpośrednia odpowiedź na twoje pytanie brzmi "tak, da się". (podobnie jak wszystko inne)

0
 #include <stdio.h>
#include <stdlib.h>
#define DEF 25

struct {
int nr; //numer tekstu pokazanego
int p; //czas kiedy sie pokazuje
int k; //czas kiedy znika
char t[100]; //tekst 1
char t2[50];

}u;

struct czas{
int g; //godziny
int s;//sekundy
int m;//minuty
int ms;//milisekundy
}p,k;

void wyp (struct czas l,int f,int c){
l.ms=(f*c)%1000;
l.s=((f*c)/1000)%100;
l.m=(((f*c)/1000)/100)%100;
l.g=((((f*c)/1000)/100)/100)%100;
}

void poprawa(struct czas l){
if (l.ms ==0) p.ms=040;
if (l.ms ==0) k.ms=040;
if (l.ms==1000){
l.s=l.s+1;
l.ms=0;}
}


void main(int argc,char *argv[]){
FILE *wejsciowy,*wyjsciowy;

int fps,i,c,n;
n=0;
if (argc=3) fps=DEF;
else fps=atoi(argv[3]);
c=1000/fps;
if((wyjsciowy=fopen(argv[1],"a+"))<0) exit(-1);
if((wejsciowy=fopen(argv[2],"r"))<0) exit(-1);
for(i=0;!feof(wejsciowy);i++,n++){
fscanf(wejsciowy,"{%d}{%d}%[^\n]\n",&u.p,&u.k,u.t);
wyp(p,u.p,c);
wyp(k,u.k,c);
poprawa(p);
poprawa(k);
fprintf(wyjsciowy,"%d\n%.2d:%.2d:%.2d:%.3d --> %.2d:%.2d:%.2d:%.3d\n%s\n\n",n,p.g,p.m,p.s,p.ms,k.g,k.m,k.s,k.ms,u.t);
}
}

chodzi o ten kod jest to konwertowanie z txt na srt i wczytuje linie {123}{123}-tekst1 | tekst2 gdzie chce aby | bylo znakiem nowej lini.
ale wyskakuje mi tutaj naruszenie ochrony pamieci ? Moglby ktos powiedziec jaki robie blad?

0

Jednak program działa ale cos jakby w ogole nie dzialala ta funkcja wyp . Pomogł by ktos?

0

Odwołujesz się do kopii struktury, która powstała przy wywołaniu funkcji. Najlepszym rozwiązaniem będzie użycie wskaźnika do tej struktury.

BTW a na zegarku to się znasz ?

0

a jaki jest inny sposób zeby z sekund zrobic dokladnosc co do milisekundy przy określonej ilosci fps?

0

wiesz jak wciecia poprawiaja czytelnosc kodu? Wiesz jak czytelnosc poprawia rozdzielenie definicji od deklaracji?

#include <stdio.h>
#include <stdlib.h>
#define DEF 25

struct nazwijto {
  int nr; //numer tekstu pokazanego
  int p; //czas kiedy sie pokazuje
  int k; //czas kiedy znika
  char t[100]; //tekst 1
  char t2[50];
}

struct czas{
  int g; //godziny
  int s;//sekundy
  int m;//minuty
  int ms;//milisekundy
}

nazwijto u;
czas p,k;

void wyp (struct czas* l,int f,int c){
  (*l).ms=(f*c)%1000;              // tak
  l->s=((f*c)/1000)%100;          // albo tak
  l->m=(((f*c)/1000)/100)%100;
  l->g=((((f*c)/1000)/100)/100)%100;
}

void poprawa(struct czas* l){
  if (l->ms ==0) p.ms=040;        // globalne, lokalne, ehhh
  if (l->ms ==0) k.ms=040;
  if (l->ms==1000){
    l->s=l->s+1;
    l->ms=0;
  }
}


int main(int argc,char *argv[]){   // int !!!! to ze bcb czy inne pomioty przyjmują void nie znaczy ze nie trzeba deklarowac main z int na wyjściu
  FILE *wejsciowy,*wyjsciowy;

  int fps,i,c,n;
  n=0;
  if (argc=3){
    fps=DEF;
  }else fps=atoi(argv[3]);
  c=1000/fps;
  if((wyjsciowy=fopen(argv[1],"a+"))<0) exit(-1);
  if((wejsciowy=fopen(argv[2],"r"))<0) exit(-1);
  for(i=0;!feof(wejsciowy);i++,n++){
    fscanf(wejsciowy,"{%d}{%d}%[^\n]\n",&u.p,&u.k,u.t);
    wyp(p,u.p,c);     // wiesz co to zmienne lokalne?
    wyp(k,u.k,c);     // poza tym masz w deklaracji funckji 3 parametry, w wywolaniu 4 
    poprawa(&p);     // wskaznik do struktury
    poprawa(&k);
    fprintf(wyjsciowy,"%d\n%.2d:%.2d:%.2d:%.3d --> %.2d:%.2d:%.2d:%.3d\n%s\n\n",n,p.g,p.m,p.s,p.ms,k.g,k.m,k.s,k.ms,u.t);
  }
  return 0;   //  a 0 zwracasz jeśli wszystko poszlo ok, w innym wypadku nie-0
}

robisz błędy wszędzie.

jedno mi sie podoba w tym co napisałes:

  if (warunek) {  // poczatek bloku w tej samej linii
  } // a koniec pod instrukcja, ktora po ktorej jest wykonywany

i tylko tyle

// Do newbie

0

poza tym masz w deklaracji funckji 3 parametry, w wywolaniu 4

w wywołaniu też są 3 :) struktura int z u.p i int zmiennej c .

1 użytkowników online, w tym zalogowanych: 0, gości: 1