2016-03-22 26 views
1

'da bir diziye taramada sorun yaşıyorum Ben hex değerleri içeren bir .dat dosyasını fscanf() kullanarak bir diziye taramaya çalışıyorum. Programım dosyayı başarıyla tarar ve değerleri diziye koyar, ancak bunları konsollara geri yazdırdığımda değerler çok farklıdır. Aşağıdaki kod, dosyayı açan ve tarayan işlevimdir. Şu anda "1 2 3 4 5 6 7 8 9 a b c d e f" değerlerine sahip bir test.txt dosyası kullanıyorum. Programı çalıştırdığımda, konsola yazdırılan her bir işlemden sonra değişen 5 hex değerinin ardından "0 ffffffff 0 0 0" ifadesi geliyor.Onaltılık değerleri C

void sim(int bytes, int lines, int sets, int policy){ 
    int i = 0; 
    int total_Misses = 0; 
    int total_References = 0; 
    FILE *f1 = fopen("test.txt", "r"); 
    if (f1 == NULL){ 
     printf("File failed to open"); 
     exit(0); 
    } 
    unsigned int a[10]; 

    while (i < 10){ 

     fscanf(f1, "%x", &a[i]); 
     printf("%x ", a[i]); 
     i++; 
    } 
} 
+0

Dosyanız neye benziyor? Orada 10 değer var mı? 'Fscanf' sonucunu kontrol edin. –

+1

Bu 'test.txt' dosyasını nasıl oluşturdunuz? Düz metin düzenleyicisi kullandıysanız, dosyanın başında bir [BOM] (https://en.wikipedia.org/wiki/Byte_order_mark) eklemediğinden emin olun. Komut satırında 'xxd test.txt' yazmayı deneyin ve neye benzediğini görün. –

+2

En iyi sınama 'fscanf', 'yanlış' bir değer yazdırdığını varsaymadan önce "1" değerini döndürürse. – usr2564301

cevap

0

Kod tamam görünüyor ve tüm yorumlar girişle ilgili bir sorun olduğunu gösteriyor. Ben hataları yakalamak için aşağıdaki kodu uyarlamak önermek:

while (i < 10){ 

    if (fscanf(f1, "%x", &a[i])==1) { 
     printf("%x ", a[i]); 
     i++; 
    } 
    else printf ("Error reading field %d\n", i); 
} 

P.S. .: a[10] otomatik değişken değil başlatıldı olduğunu. Dolayısıyla, dizi girişi için bir değer okumayan, karşılaştığınız başlatılmamış çöp değerini yazdıracaktır.

P.p.s .: Sık sık görülen beyaz alanı atlamak için % oturumunun önüne scanf gurus bir boşluk ekliyorum.

İlgili konular