Wpis z mikrobloga

#cpp #programowanie

char znak[16];

// init

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

{

znak[i] = rand()%26 + 65;

if (znak[i] > 90 || znak[i] < 65) {znak[i] ='g'; } //chwilowe

}

cout << znak << endl;

strcat(znak,".txt");

ofstream outFile(znak);

cout << znak << endl;

`if (counter >= 10)

{

outFile.close();

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

{

znak[i] = rand()%24 + 65;

if (znak[i] > 90 || znak[i] < 65) {znak[i] ='g'; } //chwilowe

}

// cout << znak << endl;

strcat(znak,".txt");

ofstream outFile(znak);

counter = 0;

}`

Mirki, co tu jest źle? Pierwszy kod wykonuje się na początku programu, drugi już później (kiedy counter będzie >= 10). Założenie jest takie, że ma mi tworzyć pliki txt o losowej nazwie złożonej z 16 dużych liter. Do plików "ręcznie" wpisuję cyferki, a gdy będzie ich odpowiednia ilość, chcę zamknąć plik txt, utworzyć następny i wpisywać do niego.

Otrzymuję 16 literowe ciągi dużych liter, potem 3 losowe znaki i .txt.
  • 19
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Noct: Ogólnie to jest źle skonstruowane. Kod się powtarza. Napisz jeszcze raz. :D

Wyjaśnij jeszcze raz, na czym ten kod ma polegać.
  • Odpowiedz
@Noct: zrób sobie osobną funkcję do generowania stringów o losowej zawartości.

Błędnie uƶywasz

strcat
- wychodzisz poza zakres. W
  • Odpowiedz
@Noct:

Mirki, co tu jest źle?


no właśnie może ty nam powiesz w czym masz problem ;).

tablica znak jest c-stringiem czyli powinna mieć 0 na końcu, czy na pewno tak jest? czy ma odpowiedni rozmiar żeby pomieścić 16 znaków + ".txt" + "\0"
  • Odpowiedz
@Noct: zapomniałeś o terminatorze stringa. Ostatni znak w stringu musi mieć wartość 0 + strcat też ci rozwala zmienną. Więc weź sobie nie żałuj i ustaw wielkość tablicy na 21, a za pętlą zakończ string poleceniem: znak[16] = '\0';
  • Odpowiedz
@Noct: funkcja strcat sama dodaje \0 na końcu. ważne żeby twój napis był zakończony tym znakiem przed wywołaniem strcat. czyli:

znak[16] = '\0';

strcat(znak,".txt");

ofstream outFile(znak);
  • Odpowiedz
@inplaz: To już zrobione. Teraz zostaje rozwiązać problem pustych plików (oprócz pierwszego), tworzone są normalne .txt z dobrą nazwą, jednak mają rozmiar 0B...
  • Odpowiedz
@Noct: to pokaż kod odpowiedzialny za zapis.

ale wnioskując po tym kodzie który podałeś to dalej zapisujesz do pierwszego pliku.

w drugiej części twojego kodu
  • Odpowiedz
@inplaz: Świetnie, działa.

Ostatnia rzecz: pętla główna programu to while(true), ktora wykonuje się cały czas, aż do momentu:
  • Odpowiedz
@Noct: nie wiem, może outFile jest już zamknięte i pluje wyjątkiem przy próbie zamknięcia? spróbuj:

if(outFile.is_open()) outFile.close();
  • Odpowiedz