Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

getline

Ostatnio zmodyfikowano 2011-01-23 20:03
Autor Wiadomość
PawelBo
Temat założony przez niniejszego użytkownika
getline
» 2011-01-22 23:21:37
ech... mam problem z programem...
[c++]
#include <iostream>
#include <fstream>
#include <cstdlib>

using namespace std;

int main(int argc, char *argv)
{
    string wiersz;
    int licznik_1 = 0, licznik_2 = 0;
    char znak = '.';
    ifstream plik_we_1 ("pierwszy.dat");
    ifstream plik_we_2 ("drugi.dat");
    while (!plik_we_1.eof()) {
      getline (plik_we_1, wiersz);
      licznik_1++;
      for (int i=0;i<=wiersz[wiersz.size()-1];i++){
        if (wiersz==znak){
          cout << "znak= " << wiersz << endl;
          licznik_1--;
          break;
        }
              cout << wiersz << endl;
      }

    }
    cout << "licznik_1= " << licznik_1 << endl;
    plik_we_1.close();
    plik_we_2.close();
    system ("pause");
    return 0;
}
[c++]
P-26879
dmx81
» 2011-01-22 23:54:11
C/C++
wiersz == znak; // zamien na
wiersz[ i ] == znak;

//sprawdzaj, czy plik wczytany

if( plik.is_open() )
//kod
else
//wyswietl komunikat
 (i uzywaj znacznikow np  code src = C + + , / code oczywiscie nawiasach kwadratowych i bez tych spacji)

w ogole nie wiem czy dobrze masz petle napisana (nie powinno byc
for( int i = 0; i < wiersz.size() - 1; i++ ) ??
P-26880
PawelBo
Temat założony przez niniejszego użytkownika
cd
» 2011-01-22 23:57:33
źle sie skopiowalo jest
wiersz[ i ] == znak
, problem w tym, ze jesli wiersz ze znakiem jest wiekszy od pozostalych to licznik_1 'wariuje"[/i]'
P-26881
dmx81
» 2011-01-23 00:02:48
moze napisz jeszcze raz, co chcesz osiagnac, dla mnie ta petla for wyglada podejrzanie, zobacz jak napisalem powyzej

bo ty masz warunek , ze i zaczynasz od 0, drugie, ze i<=wiersz[wiersz.size()-1 co oznacza, ze i ma miec wartosc mniejsza, niz komorka pamieci na pozycji wiersz.size()-1, a chyba chcesz aby bylo dla rozmiaru mniejszego, niz ilosc elementow w wiersz?
P-26882
PawelBo
Temat założony przez niniejszego użytkownika
cd
» 2011-01-23 00:05:01
wczytuję plik wierszami i sprawdzam, czy nie zawiera jakiegos znaku w wierszu, jezeli zawiera to licznik--
P-26883
dmx81
» 2011-01-23 00:05:08
C/C++
#include <iostream>
#include <fstream>
#include <cstdlib>

using namespace std;

int main( int argc, char * argv )
{
    string wiersz;
    int licznik_1 = 0, licznik_2 = 0;
    char znak = '.';
    ifstream plik_we_1( "pierwszy.dat" );
    ifstream plik_we_2( "drugi.dat" );
    if( plik_we_1.is_open() )
    {
       
        while( !plik_we_1.eof() ) {
            getline( plik_we_1, wiersz );
            licznik_1++;
            for( int i = 0; i <= wiersz.size() - 1; i++ ) {
                if( wiersz[ i ] == znak ) {
                    cout << "znak= " << wiersz << endl;
                    licznik_1--;
                    break;
                }
                cout << wiersz << endl;
            }
           
        }
        cout << "licznik_1= " << licznik_1 << endl;
        plik_we_1.close();
        plik_we_2.close();
        system( "pause" );
    }
    else
         cout << "blad otwarcia pliku";
   
    return 0;
}

sprawdz czy tak jest dobrze?
P-26884
PawelBo
Temat założony przez niniejszego użytkownika
:)
» 2011-01-23 00:07:51
wyglada na good:)))) jeszcze sprawdze, danke
P-26885
dmx81
» 2011-01-23 00:09:17
troszke nie rozumiem twojego rozwiazania, byc moze juz pozna pora i dlatego, ale:

wczytujesz caly wiersz z pliku - licznik++  OK

sprawdzasz w tym wierszu, czy wystepuje jakis znak  OK

jesli wystepuje znak, licznik-- OK

czyli powiedzmy wczytasz linie taka:  123...123 -
sledzac twoj program, najpierw licznik jest = 0, dodamy 1 po wczytaniu wiersza, odejmiemy 3 po trzech kropkach, wynik = -2

powiedzmy bedziesz mial iles tam tych wierszy, to zeby wiedziec, ile razy wystapil znak, bedziesz musial od wyniku odjac (a raczej dodac? liczbe wierszy)

chyba ze powinienes jeden licznik zrobic na ilosc wierszy, inny na licznie wystapienia znaku?

//  poza tym otwierasz 2 pliki, korzystasz z jednego, chyba ze to na potem...
P-26886
« 1 » 2 3
  Strona 1 z 3 Następna strona