Pliki (.txt) w C a formatowanie danych wejściowo/wyjściowych

0

Witam serdecznie,
jestem tu nowy i z góry przepraszam za jakiekolwiek gafy odnośnie kultury na Forum.

Mam drobny problem z formatowaniem pliku wyjściowego.
Zestaw danych wyjsciowych posegrgowanych w kolumny postaci:

(1) 8.0073795736288105e+001 -1.2188466291539271e+001 1.0001053485058802e+000 4.8678206002176877e-001
(2) -3.5260366962948408e+000 9.2185057920884539e-001 9.5420311810277036e-001 5.3692783960596913e-001

nie jest równo umiejscawiany w kolumnach tj. chciałbym otrzymać postać:
(1) 8.0073795736288105e+001 -1.2188466291539271e+001 1.0001053485058802e+000 4.8678206002176877e-001
(2) -3.5260366962948408e+000 9.2185057920884539e-001 9.5420311810277036e-001 5.3692783960596913e-001

moja funkcja przekierowująca wygląda mnije więcej tak:

void doPliku(double *xt,double *yt,int m,double *bl,double *lg,double a,double b,int n)
{
	FILE *plik;
	int i;
	int licznik=0;
	if((plik=fopen("wyniki.txt","w"))==NULL)
{
	printf("BLAD PLIKU!");
	exit(1);
}	fprintf(plik,"%s","INTERPOLACJA FUNKCJI JEDNEJ ZMIENNEJ-WIELOMIAN IINTERPOLACYJNY LAGRANGE'A (wyniki)\n\n");
	fprintf(plik," >poczatek przedzialu    -a:%e\n >koniec przedzialu      -b:%e\n >liczba wezlow          -n:%d\n >liczba punktow wykresu -m:%d\n\n",a,b,n,m);
	fprintf(plik,"%s","  _______________________________________________________________________________________________________________________\n");
	fprintf(plik,"%25s","xt[i]");
	fprintf(plik,"%30s","yt[i]");
	fprintf(plik,"%33s","yt[i] Lagrange'a");
	fprintf(plik,"%20s\n","bl");
	fprintf(plik,"%s","  _______________________________________________________________________________________________________________________\n");
	fprintf(plik,"%5s"," ");

for(i=1;i<=m;i++)
{	
	licznik=licznik+1;
	fprintf(plik,"(%d)",i);fprintf(plik,"%5s"," ");	
	fprintf(plik,"%.16e",xt[i]);fprintf(plik,"%5s","|");
	fprintf(plik,"%.16e",yt[i]);fprintf(plik,"%5s","|");
	fprintf(plik,"%.16e",lg[i]);fprintf(plik,"%5s","|");
	fprintf(plik,"%.16e\n",bl[i]);fprintf(plik,"%5s","");

}

fclose(plik);
	
}

Podejrzewam, że winowajcą jest znak minus lub inny występujący przed wartością liczbową.
Uprzejmie proszę o pomoc w tej sprawie.)

0

Tu masz opis formatu printf'a:
http://www.cplusplus.com/reference/clibrary/cstdio/printf/

Zainteresuj się polami "flag" i "width"

MrFox napisał(a):

fprintf(plik,"%.16e\n",bl[i]);fprintf(plik,"%5s","");

Za dużo. Po nowej linii ('\n') już nie wstawiaj spacji.

1

eeee.... indeksujesz jak humanista, a nie jak informatyk, czyli prosisz się o kłopoty

for(i=0;i<m;i++) {
    fprintf(plik,"(%d) % 24.16e % 24.16e % 24.16e % 24.16e\n", i, xt[i], yt[i], lg[i], bl[i]);
}
0

Dzięki wielkie.

0

Jeśli można jeszcze jedno pytanko.
Czy dałoby się jakąś komendą w kodzie automatycznie otwierać plik.txt poprzez program wykonywalny.
Wiem, że coś takiego jest w Adzie95, ustala się adres pliku itd.
No i chyba można poprzez biblioteke stdlib.h za pomocą polecenia system i podania adresu poprzez wywołanie polecenia z cmd.
Czy istnieje jakby to ująć mniej radykalny sposóby - bardziej programistyczny.

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