wczytywanie po 1 znaku do tab

0

Jak w jezyku c++ wczytac z piku po kolei znak i przypisac kolejno do tablicy

0

zakładając że tenże plik masz w strumieni plik, to

#include <stdio.h>
char c;
int i=0;
int tab[100];
 do {
      c = getc (plik);
      tab[i]=c;
      i++;
    } while (c != EOF);
 

Coś takiego powinno zadziałać.

0

Ten kod ma jakieś błędy, jest pewny że jest poprawny ?

0
#include <stdio.h>
#include <fstream>

int main()
{

char c;
int i=0;
int tab[100];
std::fstream plik;
plik.open( "c\\:plik.txt", std::ios::in | std::ios::out );

{
do
{
      c = getc (plik);
      tab[i]=c;
      i++;
}while (c != EOF);
}
0

Podaj BŁĘDY wypluwane przez kompilator...

0

Wybaczcie ale dopiero zaczynam temat związany z obsługą plików:
in function 'int main()':
error: cannot convert 'const char*' to 'FILE' for argument '1' to 'int getc(FILE*)'
error: expected '}' at end of input

0

Wypadałoby chociaż zajrzeć do dokumentacji (http://www.cplusplus.com/reference/clibrary/cstdio/getc/)...
getc oczekuje typu FILE (a raczej wskaźnika na ten typ), podczas gdy Ty podajesz std::fstream

0

dzięki za dokumentację, poprawiłem program przez co teraz się kompiluje jednak przy starcie wyskakuje błą

#include <stdio.h>
#include <iostream>

using namespace std;

int main()
{

char c;
int i=0;
int tab[100];
FILE * pFile;
pFile=fopen ("c\\:plik.txt","r");

do
{
      c = getc (pFile);
      tab[i]=c;
      i++;
}while (c != EOF);

cout << tab[1];
}

dodatkowo co oznacza "r" tutaj pFile=fopen ("c\:plik.txt","r"); ?

0

Po drobnej analizie edytowałem kod

#include <stdio.h>
#include <iostream>
using namespace std;
int main ()
{
  FILE * pFile;
  int c;
  int tab[100];
  int i=0;

  pFile=fopen ("c:\\plik.txt","r");
  if (pFile==NULL) perror ("Error opening file");
  else

do
{
      c = getc (pFile);
      tab[i]=c;
      i++;
}while (c != EOF);

cout << tab[0];

  return 0;
}

Teraz jedynym problemem jest to że tab[0] do którego przypisany jest 1 znak/cyfra w pliku czyli w tym przypadku 1, zwraca wartość 49, czyl itablice zwracają błędne informację.

0

Och tak? A czy pierwszym znakiem w pliku nie jest '1'? Czyli znak o kodzie 49?

0

Jak dokonać konwersji ?

0

Shalom czemu po prostu nie zmienić typu na char ?
Ja zmieniłem i wszystko działa, bez zbędnego babrania się z tym atoi()

0

o_O? Spytałeś jak dokonać konwersji. Rozumiałem że chodzi o konwersję na liczby. Jak chcesz to tylko wypisać to w ogóle żadnej konwersji nie potrzeba.

0
bobo napisał(a):

Jak w jezyku c++ wczytac z piku po kolei znak i przypisac kolejno do tablicy

Plik tekstowy? Jeśli by założyć, że w pliku nie ma bajtów zerowych ('\0') to można to zrobić w ten sposób:

string tablica;
getline(ifstream("nazw_pliku"), tablica, '\0');

W ten sposób w do zmiennej tablica trafią wszystkie znaki pliku aż do jego końca lub pierwszego znaku '\0' jeśli ten pojawi się wcześniej.
Binarnie razem z bajtami zerowymi? W ten sposób:

ifstream plik("nazw_pliku");
vector<char> tablica;
/* odczytujemy rozmiar pliku */
plik.seekg(0, ios::end);
unsigned rozmiar = plik.tellg();
plik.seekg(0, ios::beg);
/* wczytujemy bajty */
tablica.resize(rozmiar);
plik.read(&tablica.front(), rozmiar);

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