2011-11-23 18 views
11

Bu, stackoverflow'u ilk defa kullanıyorum. Getline ile ilgili ihtiyacım olan bilgiyi bulamadım. Mühendislik transferleri için basit bir programlama sınıfındayım, bu yüzden yazdığımız kod oldukça basit. Burada yapmaya çalıştığım tek şey, kullanıcı tanımlı bir dizi soru ve cevapları iki farklı diziye yerleştirmektir. Ben parçasını giren cevabı yanı sıra dosyaya kaydetme verileri kaydettigetline + dizeleri hakkında neyi anlamadım?

int main() 
{ 
    srand((unsigned)time(0)); 
    string quest1[100], answ1[100]; 
    int size1, x = 0, num, count1, visit[100], shuffle[100]; 
    fstream flashcard1; 

    cout << "flashcard.cpp by NAME\n" << endl; 
    cout << "This program allows user to manipulate questions and answers for studying.\n" << endl; 
    cout << "\nHow many flash cards will be entered(MAX 100)? "; 
    cin >> size1; 
    cout << endl; 

    while(x < size1) 
    { 
     cout << "Enter Question: "; 
     getline(cin , quest1[x]); 
     cout << endl; 
     x = x++; 

     /* 
     cout << "Enter Answer: " << endl; 
     getline(cin,answ1[x]); 
     cout << endl; 
     flashcard1.open("flashcard1.dat", ios::app); 
     flashcard1 << quest1[x] << " " << answ1[x] << endl; 
     flashcard1.close(); 
     cout << "Data Stored." << endl; 
     */ 
    } 
} 

: My while döngüsü (Ben kırma durdurmak Eğer sadece görmek için bir for döngüsü kullanarak ancak süre geçildi) şöyle sadece hata ayıklama için. Programı çalıştırdığımda, ilk soru için getline atlıyor, "Enter enter" kelimesinin ikinci döngüsünü ve geri kalanı için getline çalışıyor. Yani, 5 değerinde bir boyutum varsa, program sadece 1-4 sıralarını doldurur. Lütfen yardım et. Bu çalışma ve bunları karıştırmak için flaş kartları oluşturmak için sanki aynı şeyi yapacak basit bir flaş kart programıdır. Eğer

cin >> size1; 

yaptığınızda bir sayı girin ve Enter tuşuna çünkü

+7

', x = x ++; 'Tanımsız davranıştır. Sadece olması gerektiği 'x ++' (veya '++ x' veya' x + = 1 'ya da' x = x + 1 'veya 'x - = -1' ....) ++ x nedeni var –

+0

ve ++ x'in her ikisi de, değerini 1 ile azaltarak/azaltarak x'in kendisini değiştirir. Ödevin bu şekilde veya bundan sonra gerçekleştiğini garanti edemezsiniz, bu yüzden x, artış gerçekleşmeden önce ya da gerçekleştikten sonra x ++ değerine atanabilir. standart sadece bunu belirtmez). SO hakkında iyi bir İlk Soru için –

+4

+1. –

cevap

12

ilk yinelemesini atlamak için görünen oluyor nedenidir. cin atar, tamsayı okur ve getline Aradığınızda hemen enter tuşuna sanki, bu kadar böylece tampon üzerinde okunmamış satır karakteri bırakır ve (o satır karakteri okumadan önce durur çünkü) getline şey okur newline ve boş dize quest1[0] içinde koyar. Ve bu yüzden getline'un geri kalanı "doğru" çalışıyor.

Kalan '\n''dan kurtulmak için döngünüzün üst tarafındaki cin.ignore('\n')'u ekleyin ve kodunuzun diğer hatalarını engellemeye çalışın.

Ve sadece x++ UB önlemek için x = x++ değiştirmek unutmayın.

+0

Teşekkürler! Yıllar içinde böyle bir yardımsever topluluğu yaşamadım! – Brent

+0

@Brent bu soruya cevap verirse, lütfen sorunuzun cevabı olarak işaretlemek için yanındaki onay işaretini tıkladığınızdan emin olun. –

+0

Özür dilerim.Daha önce sınıftaydım ve programımı düzenleyemedim, ancak bunun doğru cevap olduğunu varsaydım. Döngünümün üstündeki cin.ignore ('n)' yi eklediğimde, program, sadece ilk vurma ifadesini, sadece yarım vuruştan yaklaşık yarım düzine kadar – Brent