Bazı verilerden bir dosyadan okumaya çalışıyorum (en nihayetinde bir yapıya, ancak şimdilik önemli değil) ve bu dosyanın her biri için eşit miktarda veriye sahip olduğundan emin olmak için hat. Her satırda kelimeler veya sayılar olabilir, bu yüzden bir satırın bir satırını büyük bir dizeye dönüştürdüm. Sonra bu dizgeyi strtok ve virgülleri (verileri ayıran) sınırlayıcı olarak kullanarak tokenlere bölmeyi denerim. Ancak, virgüller arasında var olan belirteçlerin miktarını nasıl sayabilirim. Her satırdaki virgüllerin miktarını saymayı denedim ama nedense beklediğim gibi davranmıyor. Dosyadaki her satırın tümü 5 parça veriye sahiptir, hepsi virgülle bölünür, bu yüzden her satırda 4 virgül olmalıdır. Bir dosyanın her bir satırındaki öğe miktarı nasıl sayılır
while (fgets(string, sizeof(string), f)) {
input = fgetc(f);
if(input == ','){
i++;
}
else if (input == ' '){
printf("Error");
exit(0);
}
}
if(i % 4 != 0){
printf("Error");
exit(0);
}
İşte ben her satırda virgül miktarını saymaya çalışıyorum (ve dosya hattında bir boşluk gidecekseniz eğer SADECE verileri bölünmesi virgül istediğiniz gibi, bu bir hata göstermelidir). Sonunda, fantastikler okumayı bıraktıktan sonra, "i" değişkeninin 4'lük bir katı olup olmadığını görmek istiyorum. Bunu yapmak için daha verimli ve kullanıcı dostu bir yol var eminim ama bir tane düşünemiyorum.
Hızlı soru da: komutların geri kalanı devam etmeden önce, satırdaki tüm karakterleri fgetc çalıştırıyor mu, yoksa virgülle karşılaşıldığında, programım bir sonraki döngüde mi hareket edecek?
Teşekkür ederiz!
'fgets (string, sizeof (string), f)' 'string' ile okunan veriler kullanılmaz. Bu senin niyetin mi? – chux
Neden hem 'fgets()' * ve * 'fgetc()' kullanıyorsunuz? – EOF
virgüllerin bir satırda sayılmasının ve bir alanın üzerine çıkmanın basit bir yolu, satırdaki gibi yinelemektir: 'size_t commaCount = 0; (size_t i = 0; string [i]; i ++) {if (',' == string [i]) {commaCount ++; } else ('' == string [i]) {// boşluk nedeniyle iptal et}} ' – user3629249