Podkreślanie liter w przepisywanym pliku

0

Witam! Mam problem z takim zadaniem. Muszę podkreślić litery w przepisywanym pliku. Problem w tym, że kiedy nie podkreślałam, wszystko hulalo, ale jak zaczęłam podkreślać, to powtarza mi linie(w sensie zamiast)

Ala ma kota.
^
Kot ma Alę.

Wyświetla mi

Ala ma kota.
^
Ala ma kota.
Kot ma Alę.

Przy większej ilości zawsze zamiast jednej wpisuje mi dwie linijki na każdą pętlę. Jak to naprawić? Fragment podkreślający (DL_LINII=80)

if (plik!=NULL){
	wynik=fgets(tekst,DL_LINII,plik);
	while (wynik!=0){
		printf ("%s", &tekst);
		fprintf(plik2,"%s",&tekst);
		fprintf(plik2,"%s",&tekst2);
		wynik=fgets(tekst,DL_LINII,plik);
	}
	fclose(plik);
	fclose(plik2);} 
0

Za duży skrót myślowy!

  1. Z twojego kodu w ogóle nie widać skąd się bierze podkreślenie.
  2. Wartość tekst2 w podanym kodzie nie zmienia się
  3. na dodatek nie wiadomo po co ci te ampersandy (oczekuje, że tekst i tekst2 to są tablice char: char tekst[DL_LINII+1]; a w takim wypadku ampersandy są niepotrzebne/błędne)
0

Odpowiedź jest prosta, tutaj: &tekst i &tekst2 czytasz z nie-swojej-pamięci na stosie. Tak samo pewnie robisz zapisując dane i w efekcie takie kwiatki wychodzą.

0
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define DL_LINII 80
#define MAX 50

int main(){
char nazwa_we[MAX], nazwa_wy[MAX], tekst[DL_LINII], tekst2[DL_LINII], wzorzec[MAX], *wynik;
FILE *plik, *plik2;
int i;
for (i=0;i<DL_LINII;i++)
	{if (i==(DL_LINII-1))
		tekst2[i]= '\n';
	else if (i==5)
		tekst2[i]='^';
	else
		tekst2[i]=' ';}

printf ("Podaj nazwe pliku wejsciowego: \n");
scanf ("%s", nazwa_we);
printf ("Podaj nazwe pliku wyjsciowego: \n");
scanf ("%s", nazwa_wy);
printf ("Podaj wzorzec:\n");
scanf ("%s", wzorzec);

plik=fopen(nazwa_we,"r");
plik2=fopen(nazwa_wy,"w");

if (plik!=NULL){
	wynik=fgets(tekst,DL_LINII,plik);
	while (wynik!=0){
		printf ("%s", &tekst);
		//porownanie (tekst, wzorzec);
		fprintf(plik2,"%s",tekst);
		fprintf(plik2,"%s",tekst2);
		wynik=fgets(tekst,DL_LINII,plik);
	}
	fclose(plik);
	fclose(plik2);}
else 
	printf("Blad uchwytu pliku");} 

Póki co ma podkreślać 6 literę w każdej linijce.
Cały kod

0

gdzie jest zero na końcu tekst2?
Nie ma więc printf czyta dalej i natrafia na ... .

PS. Nadal masz zbędny ampersand!

0

Dziękuję! Teraz mi już śmiga! Ale radość:D

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