2016-03-22 16 views
0

Bir okul projesi için öğrenci veritabanı sistemi oluşturmaya çalışıyorum. Öğrenci kimliği için bir .txt dosyası arayacak ve dizedeki diğer tüm değişkenleri döndürecek bir işlev oluşturmaya çalışıyorum. Öğrencinin kimliğini txt dosyasının ilk satırında ararsam ancak başka bir satırda bir öğrenci ararsam hiçbir şey yakalamıyorsam, bu harika çalışıyor. Belli bir şey eksik miyim?C++ dosyasındaki .txt dosyasından çok satır okuma sorunu.

Öğrenci verileri, her satırda virgüllerle ayrılmış 16 dizedir. Öğrenci kimliği ilk dizedir.

Yardımlarınız için teşekkürler!

StudentType findStudent(int studentToFind) 
{ 
    ifstream inFile; 
    inFile.open("students.txt"); 

    string currentLine; 
    string dataRead[16]; 
    istringstream is; 
    int currentStudent; 

    if (inFile) 
    { 
     while (getline(inFile, currentLine)) 
     { 
      is.str(currentLine); 

      for (int i = 0; i < 16; i++) 
      { 
       getline(is, dataRead[i], ','); 
      } 

      currentStudent = stoi(dataRead[0]); 

      if (currentStudent == studentToFind) 
      { 
       /* 
       Do stuff here 
       */ 

       inFile.close(); 
       return foundStudent; 
      } 
      cin.ignore(); // Not sure if this is needed but I was trying to 
          // clear the \n char if that was causing the issue 
     } 
    } 
} 
+0

Lütfen tüm sorununuzu buraya göndermeyin. sahip olduğunuz konu/soruyla doğrudan alakalı olmayan öğeleri kaldırın. Bu durumda, bu kodun yalnızca NONE'si önemlidir ... – UpAndAdam

+1

Beklediğiniz gibi olduklarından emin olmak için her döngü yinelemesi için currentStudent ve studentToFind değerlerinizi kontrol etmek üzere bir hata ayıklayıcı (veya baskı ifadeleri) kullandınız mı? – Tuffwer

+0

Tüm değerleri atadığım parçaları çıkardım, üzgünüm, tüm işlevlerin yararlı olacağını düşündüğüm varsayıldım. Ben bir breakpoint koydu ve currentStudent değeri asla yeni satırın değerine atanmış gibi görünüyor, bu yüzden onun bir sonraki hatta almıyor varsayıyorum. –

cevap

3

İlk: Eğer cin kullanmıyorsanız, bu nedenle cin.ignore() kurtulmak.

İkincisi: Sonunda DAİMA kapanmasına dikkat etmelisiniz ... bu yüzden erken dönmemeyi veya erken kapanmamayı öneririm, ancak döngüden çıkmak için bir break ifadesi kullanın ve sonra da bulup bulmadığınızı tek bir dönüşünüz olsun ya da değil. Üçüncüsü: Artık tüm 'gorp' 'u kaldırdığınızı, sonunda problemin üzerine girebildiğimizi ... etkin olarak soruyu tüm satırları okuyor muyuz?

Eh geliyor ki zaman düzgün güncellenir currentLine biliyorsanız, while döngüsünde başında currentLine her seferinde dışarı yazdırmayı deneyin is her zaman güncellendiğini kontrol edelim? evet ...

tamam sonraki döngünüze bir göz atalım currentStudent her seferinde ... currentStudent her satır için doğru değeri yazdırıyor mu? Yani, dataRead[i] içine getline yazmak aslında doğru uzaya ne olduğunu düşündüğünüzü yazıyor mu?

Sorunu daha buldunuz mu?

Baskı ifadelerini ve hata ayıklayıcısını kullanarak kendinizi nasıl çözeceğinizi öğrenmek için gereksinim duyduğunuz sorun budur. Onun için ne. Görsel stüdyonuzdaysanız hata ayıklama modunda çalışıyorsanız ve bunun üzerinden adım atıyorsanız ... gdb'yi kullanın. Onu öğrenmek ve alışmak, onu çok kullanacaksınız!

iyi şanslar

+0

Yardımlarınız için teşekkürler! Bir sonraki getline geri dönmeden önce is.clear() ekleyerek bu çalışmayı başarabildim. .clear() 'daki araştırmam, akıntıdaki herhangi bir hatanın ortadan kalkması, ilk başta neden berbat olacağına dair bir ipucudur.Akışı temizlemek için en iyi uygulama varsa herhangi bir ipucu? –

+0

Yine örneğinizden geçip neyi yanlış yaptığınızı anladım; tam olarak hangi noktada çalışmıyor? .. Bir kenara açık bir şekilde yayınlamanız gerekir ki, tüm veriyi okuduktan sonra akış nesnesini yeniden kullanabilirsiniz. En iyi uygulama, yeni bir nesne kullanmak VEYA temizle ve sonra yeniden yüklemektir. – UpAndAdam

İlgili konular