• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Język C / na C++

Object Storage Arubacloud
0 głosów
1,035 wizyt
pytanie zadane 19 maja 2015 w C i C++ przez Wiciorny Ekspert (270,770 p.)
zmienione kategorie 19 maja 2015 przez Wiciorny

PROSZĘ  o pomoc 

int main() {
FILE *zrodlo;    /*wsk do pliku*/
int i;
char tab[1024];/*tab na wczytanie danych z pliku*/
cykliczny *bufor ; 
                
int sem1 = StworzSemafor(10) ;
przyp_wartosc(sem1);
       
pamiecTworz(8, 1024) ;
       
 
bufor=(cykliczny*) dowiazanie(dostep(8));         /*umieszczenie w pamieci dzielonej*/
bufor[0].rozmiar=0;
bufor[0].koniec=0;
/*otwieram plik do odczytu*/
zrodlo=fopen("plik.txt", "r") ;
        /* Zapis danych do bufora */
while(fgets( tab, 1024, zrodlo ) ) {
   for(i = 0 ; i < (strlen(tab)+1) ; i++) 
opusc(sem1) ; 
bufor[0].buf[ bufor[0].koniec ] = tab[i] ; /* umieszczenie znaku w buforze */
                        /*wskaznik na koniec bufora iteruje i wypisuje napotkane znaki*/
++bufor[0].koniec;
printf("%c", tab[i]);
printf("\n");

             
if(bufor[0].koniec == 32)
bufor[0].koniec = 0;
podnies(sem1); 

Chodzi mi głownie tu 

zrodlo=fopen("plik.txt", "r") ;
        /* Zapis danych do bufora */
while(fgets( tab, 1024, zrodlo ) ) {
   for(i = 0 ; i < (strlen(tab)+1) ; i++) 
opusc(sem1) ; 

Witam  mam o to taki tekst w jyzku C, chciaem to przerobić na C++, i potrzebuje pomocy ... nie tyle gotowca co funkcji jakich mam urzyć domyślam się, żeby char zamienić na string i coś z użyciem getline chodzi tu o inicjalizowanie bufora danymi odczytanymi z pliku . Nie potrzeba mi tlumaczenia wszystkiego, tylko głownie jak zastąpić funkcje w pentli for i wczytywanie dziękuje za pomoc. 

1 odpowiedź

0 głosów
odpowiedź 19 maja 2015 przez MrWeb Stary wyjadacz (10,200 p.)

Napisałem coś takiego ale wątpię żeby działało, dodatkowo coś musiałeś urwać z klamrami przy kopiowaniu bo main nie jest nigdzie zamykany w kodzie który wkleiłeś.

#include <iostream>
#include <fstream>

using namespace std;

int main() 
{
  //FILE *zrodlo; /*wsk do pliku*/
  fstream zrodlo; //strukturę zamieniamy na obiekt typu std::fstream
  
  //char tab[1024]; /*tab na wczytanie danych z pliku*/
  string tab; //teraz std::string tab będzie buforem dla tekstu z pliku
  tab.resize(1024); //zaalokuj 1024 bajty pamięci
  
  int i; //iterator
  
  cykliczny *bufor; //nie mam pojęcia co to jest, zostawiam w stylu C

  int sem1 = StworzSemafor(10);
  przyp_wartosc(sem1);
  pamiecTworz(8, 1024);
  
  bufor = (cykliczny*)dowiazanie(dostep(8)); /*umieszczenie w pamieci dzielonej*/
  //powyższą linię można zamienić na tą
  //bufor = static_cast<cykliczny*>(dowiazanie(dostep(8)));
  //ale lepiej nie mieszać stylu C ze stylem C++, więc zostawiam tak jak było
  
  bufor[0].rozmiar = 0;
  bufor[0].koniec = 0;

  //zrodlo=fopen("plik.txt", "r"); /*otwieram plik do odczytu*/
  zrodlo.open("plik.txt", ios::in); //otwórz dla odczytu
  
  //while(fgets( tab, 1024, zrodlo)) /* Zapis danych do bufora */
  while(zrodlo.getline(&tab[0], 1024)) //odczytaj 1024 bajty i zapisz je od pierwszego miejsca w tablicy
  {
    //for(i = 0; i < (strlen(tab)+1); i++)
    for(i = 0; i < tab.length(); i++) //tutaj jest problem, coś jest nie tak z klamrami {} w twoim kodzie, tutaj są poprawione
    { 
      opusc(sem1);
      
      bufor[0].buf[bufor[0].koniec] = tab[i]; /* umieszczenie znaku w buforze */
      
      /*wskaznik na koniec bufora iteruje i wypisuje napotkane znaki*/
      ++bufor[0].koniec;
  
      //printf("%c", tab[i]);
      cout << tab[i];
    
      //printf("\n");
      cout << endl;
 
      if(bufor[0].koniec == 32)
        bufor[0].koniec = 0;
    
      podnies(sem1);
    }
  }
}

 

 

Podobne pytania

0 głosów
1 odpowiedź 5,220 wizyt
pytanie zadane 8 czerwca 2015 w C i C++ przez pulpet112 Użytkownik (760 p.)
0 głosów
3 odpowiedzi 1,058 wizyt
+10 głosów
4 odpowiedzi 1,856 wizyt

92,626 zapytań

141,486 odpowiedzi

319,844 komentarzy

62,009 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...