Zapis do pliku z pętli

Zapis do pliku z pętli
Patryk Wielgosz
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:68
0

Napisałem kod do poniższego zadania, wiem , że problem pewnie jest w pętli while, nie wiem tylko jak go poprawić

"Napisz program umożliwiający zapis do pliku w pętli łańcucha znaków
wczytanego ze standardowego wejścia. Wprowadzenie pustego tekstu będzie
oznaczać koniec wykonywania się pętli"

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

int main()
{
    char lancuch[100];
    int i;


    FILE *zapis;
    zapis=fopen("tekst.txt","w");

    if (zapis==NULL)
    {
        printf("Błąd pliku\n");
        exit(1);

    }

    while((gets(lancuch))!="/0")
    {
        fputs(lancuch,zapis);

    }
    return 0;

}

AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około miesiąc
  • Postów:3561
2

Wg manulu gets na końcu pliku zwraca nie pusty string (jak, zresztą źle - z dwóch powodów - sprawdzasz) ale NULL
https://pl.wikibooks.org/wiki/C/gets

generalnie funkcja ma "złą sławę" przez to, że pozwala przejechać poza bufor.


Bo C to najlepszy język, każdy uczeń ci to powie
edytowany 1x, ostatnio: AnyKtokolwiek
Patryk Wielgosz
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:68
0

@AnyKtokolwiek:
Jak mogę to poprawić ?

AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około miesiąc
  • Postów:3561
2

Ja chyba źle odczytałem zadanie, nie do EOF a do pustej linii
najczytelniej, bez żadnej "hackerskości" (bo można kombinowac, ale po co)

Kopiuj
while((gets(lancuch)) != NULL )   // mój warunek na EOF
    {
        if(strlen(lancuch)==0)             // tak jak rozumiuem zadanie po drugim czytaniu
                break;
        fputs(lancuch,zapis);
    }

fclose(zapis);   // lepiej będzie z tym, niż bez tego

Bo C to najlepszy język, każdy uczeń ci to powie
Patryk Wielgosz
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:68
0

@AnyKtokolwiek: Dzięki, teraz wydaje się proste
właśnie miałem to fclose(zapis) z edytować

MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:12 minut
2

gets to dziura bezpieczeństwa, należy używać fgets(lancuch, sizeof(lancuch), stdin);.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.