[C++] wyświetla int ale zapisuje do pliku char


(Sheaker) #1

Witam serdecznie. Chciałem zapisać w pliku intowe wartości charów. Napisałem taki kod:

#include 


main(){

FILE *file = fopen("C:/praca.txt", "wb");

int a, b;

char tab[] = {'a', 'b', 'r', 'a', 'k', 'a', 'd', 'a', 'b', 'r', 'a'};

     for(a=0; ; a++){

     if(tab[a] == 0) break;         

     }

int tabb[a];

for(b=0; b
tabb[b] = tab[b];

std::cout << tabb[b] << "\n";

}

      fwrite(tabb, 4, a, file);

getchar();

}

[/code]

Niestety w pliku praca.txt widzę jedynie napis "a b r a k a d a b r a" zamist "97 98 114 97 107 97 100 97 98 114 97"

Dlaczego się tak dzieje? Jak zapisać int zamiast char?


(Fiołek) #2

Otwórz sobie w hex edytorze i będziesz miał jako liczby. Jeśli chcesz zapisać 97 jako "97" to musisz skonwertować to na tekst. sprintf/stringstream/własne konwersje.


(Sawyer47) #3

Nie wystarczy rzutować char na unsigned int? Coś w tym stylu:

#include 


int main()

{

	std::ofstream out_file("tmp.txt");

	const int TAB_SIZE = 4;

	char tab[TAB_SIZE] = { 'a', 'b', 'c', 'd' };

	for(int i = 0; i < TAB_SIZE; ++i)

	{

		out_file << static_cast(tab[i]) << ' ';

	}

	out_file.close();

	return 0;

}

(system) #4

Masz spore szanse że ta pętla nigdy się nie skończy albo wyskoczy "access violation", lepiej użyć:

char tab[] = {'a', 'b', 'r', 'a', 'k', 'a', 'd', 'a', 'b', 'r', 'a'};

int a=sizeof(tab);

lub

char tab[] = {'a', 'b', 'r', 'a', 'k', 'a', 'd', 'a', 'b', 'r', 'a',0};

int a=strlen(tab);

lub

char tab[] = "abrakadabra";

int a=strlen(tab);

Nie trzeba przepisywać do innej tabeli aby wyświetlić na konsoli, wystarczy:
albo (skoro już używasz std)

#include 

...

char tab[] = {'a', 'b', 'r', 'a', 'k', 'a', 'd', 'a', 'b', 'r', 'a'};

std::fstream file;

file.open("C:\\praca.txt",ios::out);

for(int i=0;i
file.close();

char tab[] = {'a', 'b', 'r', 'a', 'k', 'a', 'd', 'a', 'b', 'r', 'a'};

for(int i=0;i


Zapisując do pliku za pomocą fwrite, zapisujesz w trybie binarnym a jak widzę chcesz w postaci tekstowej, więc albo:

[code]char buf[1+3+1+1]; // ewentualny znak + 3 cyfry + spacja + znak końca for(int i=0;i { sprintf(buf,"%d ",tab[i]); fwrite(buf,1,strlen(buf),file); }


(Sheaker) #5

Bomba! Dzięki wielkie za odp. Dzięki wielkie 13tySmok!!