Rakstīt ziņojumu 
 
Pavediena vērtējums:
  • 0 balsis - 0 vidējais
  • 1
  • 2
  • 3
  • 4
  • 5
Dīvainība ar C++
Autors Ziņa
Hamlets Atslēdzies
Junior Member
**

Ziņojumi: 2
Pievienojās: Apr 2011
Reputācija: 0
Ziņojums: #1
Dīvainība ar C++
Kods:
char **mas;
int size;
cout<<"Masiva izmers:";
cin>>size;
mas = new (nothrow) char *[size];
    if (mas == NULL) {
        cout<<"Kluda";
        exit(1);
    }

    for (int i = 0; i < size; i++) {
        mas[i] = new (nothrow) char[256];

        if (mas[i] == NULL) {
            cout << "Kluda";
            exit(1);
        }

    }
        for (int j = 0; j < size; j++) {
        cout<<j+1<< ". rinda:"<<endl;
        cin.getline(mas[j], 256);
        }
Lūk, kods, kas manām acīm šķiet darboties spējīgs un principā darbojas, vienīgi lietotājam nav iespējams ievadīt 1. teksta rindu, tas ir, ievade uzreiz pārlec uz 2. rindas ievadi. Kam tā, protams, nevajadzētu notikt.
Kā tas izpaužas redzams te:
[Bilde unled3k.jpg]

Kādas idejas par šo?
06.04.2011 20:31
Atrast visus šī lietotāja rakstītos ziņojumus Citēt šo ziņu atbildē
Uģis Lazdiņš Atslēdzies
Emulators pēc pieprasījuma
***

Ziņojumi: 222
Pievienojās: Sep 2008
Reputācija: 8
Ziņojums: #2
RE: Dīvainība ar C++
Iespējams, ka pēc 4 + enter, enters paliek buferī un tāpēc C++ domā, ka rinda jau ir ievadīta un piedāvā ievaīdt otro.

Pamēģini pēc
Kods:
cin>>size;

iztīrīt buferi. Kā - nezinu, iostream maz esmu lietojis.
06.04.2011 21:09
Atrast visus šī lietotāja rakstītos ziņojumus Citēt šo ziņu atbildē
Doktors Streindžlovs Atslēdzies
Member
***

Ziņojumi: 201
Pievienojās: Oct 2008
Reputācija: 4
Ziņojums: #3
RE: Dīvainība ar C++
It's a kind of magic.
Varbūt Uģim taisnība par buferi, bet pārliecināts neesmu - manuprāt tad tiktu izlaista katra otrā rindas ievadīšana, jo diez vai enteru saglabā pie ievadītā stringa.
Bet, ja
Kods:
cin.getline(mas[j], 256);
aizvieto ar
Kods:
cin >> mas[j];
viss strādā tīri ok. Nemācēšu gan pamatot, kāpēc tā.
06.04.2011 21:13
Atrast visus šī lietotāja rakstītos ziņojumus Citēt šo ziņu atbildē
Hamlets Atslēdzies
Junior Member
**

Ziņojumi: 2
Pievienojās: Apr 2011
Reputācija: 0
Ziņojums: #4
RE: Dīvainība ar C++
Uģim tiešām taisnība.
Kods:
cin.ignore();
un viss kārtībā.
Pateicos.
06.04.2011 21:55
Atrast visus šī lietotāja rakstītos ziņojumus Citēt šo ziņu atbildē
Reinis Taukulis Atslēdzies
apgreidots mankijs
***

Ziņojumi: 130
Pievienojās: Mar 2005
Reputācija: 4
Ziņojums: #5
RE: Dīvainība ar C++
Uģim tiešām ir taisnība: ja lieto
cin >> i;
kur i ir integer, tad 'Enter' (patiesībā '\n') tiek atstāts buferī.
Lai to izmestu, var lietot:
cin.get();

Turpretī
cin.getline(char *, int)
atbrīvojas no '\n', tāpēc pārējās rindiņas var normāli ievadīt.

Ja tu lieto
cin >> str;
kur str ir char masīvs, tad pirmais '\n', kas ir palicis buferī, tiek automātiski izmests. Šī versija gan lasīs tikai līdz pirmajam whitespace simbolam, tāpēc ievadot "pirmā rinda", tu patiesībā ievadīsi divas rindiņas.
06.04.2011 22:00
Atrast visus šī lietotāja rakstītos ziņojumus Citēt šo ziņu atbildē
Rakstīt ziņojumu 


Lēciens uz forumu:



Kontaktifizmati.lvAtgriezties uz augšuAtgriezties pie saturaArhīva skatsRSS sindikācija