2016-03-26 20 views
2

Bir dosya döngüsünden, EOF'ye ulaşıldıktan sonra çıkmak üzere talimat verilmiş olan bir while döngüsünden geçerek okutmaya çalışıyorum. Ama bir sebepten dolayı son satır okunduğunda ve durum tekrar kontrol edildikten sonra program donuyor.Garip fscanf sorunu çözme konusunda yardıma mı ihtiyacınız var

Bu benim kodudur:

char character1; 
int number1; 

while(fscanf(file,"%s %d",&character1, &number1) != EOF){ 
    //printf("%s %d\n",character1,number1) 
} 

Dosyalarım içeriği:

A 1 
B 2 
C 3 
D 4 
E 5 

Çıktı:

A 1 
B 2 
C 3 
D 4 
E 5 
| <---Blinking terminal pointer currently there 

kimse bana bu anlamaya yardımcı olabilir misiniz?

DÜZENLEME: Dosyayı main() içinde açmıyorum/kapatmıyorum, başka bir işlevde yapıyorum, bu bir soruna neden olabilir mi?

+0

'% s' yerine"% s "işlevini kullanın. – BLUEPIXY

+0

@BLUEPIXY, aynı sonuçları aldığım için üzgünüm. –

+0

Giriş bekletme (veya sonsuz döngü?) Diğer bölümlerde mevcut – BLUEPIXY

cevap

1

while döngüsündeki koşul denetimini iyileştirin. Fscanf(), EOF veya pozitif bir sayı daha fazla sonuç üretebilir. Dönüşüm başladıktan sonra bir dosya sonu oluştuğunda pozitif bir sayı da verebilir. Bir dönüşümde bir sorun yaşamanız anlamına gelir ve bu nedenle, akıştan daha fazla veri elde etmek için bir dahaki sefere dönersiniz. Yani, aynı başarısız dönüşümü dönüştürmek için sonsuz bir şekilde başarısız oluyorsunuz.

2 girdi öğesi arıyorsanız, döngülemeye devam etmek için fscanf() öğesinin 2 girdi öğesi bulunduğunu kontrol edin.

0

Sorun, fscanf öğesinin her satırın sonunda \ r veya \ n okuduğudur. Sadece onu görmezden gelmek için bir tampon oluşturur ve iyi olur. Aşağıdakileri yaptım ve sorunsuz çalıştı.

char character1; 
int number1; 
char buffer[2]; // will read the end of line 

while(fscanf(file,"%c %d",&character1, &number1) != EOF){ 
    fgets(buffer, 2, file);// does the job 
    printf("[%c] [%d]\n",character1,number1); 
} 
İlgili konular