Próbuję dostać tekst wprowadzony z konsoli zapisanej w pliku o nazwie "Output.txt" z następującym kodem ..

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

int main()
{
  printf("write something\n");
  char c;

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

  if(!output)
    {
      printf("couldn't open file\n");
      return 1;
    }

  while(c=getchar())
    fprintf(output,"%c",c);

    fclose(output);

}

Ale plik "wyjściem.txt" nie zawiera tekstu, gdy go otworzę. Dlaczego to się dzieje? Cała pomoc jest bardzo ceniona.

c
1
boddulus 22 luty 2019, 19:38

2 odpowiedzi

Najlepsza odpowiedź

Ponieważ nie masz odpowiedniego stanu wyjścia w pętli, jedynym sposobem na zakończenie programu jest silnie zakończenie procesu. Oznacza to, że nie ma gwarancji, że żaden oczekujący buforowany wyjście zostanie zapisane do strumienia output.

Co możesz zrobić, to zmienić swój stan pętli do while((c = getchar()) != EOF). Następnie możesz użyć znaków ctrl + z (Windows) lub ctrl + d (* nix) do Spraw, aby pętla była fałszywa, osiągając linię fclose(output), która spłukuje bufora i zamknie plik.

Również zrobić c an int, ponieważ to właśnie jest EOF.

3
Govind Parmar 24 luty 2019, 04:39

Prawdopodobnie chcesz czegoś takiego:

  ...
  while ((c = getchar()) != 'X')
    fprintf(output, "%c", c);

  fclose(output);
  ...

Wejście:

ABCX Enter

Wyjście.txt będzie zawierał ABC.

2
Jabberwocky 22 luty 2019, 16:51