2016-03-27 18 views
0

Fscanf işlevini fazla kullanmadım. Bu sorunu hacker dünyasında çözmeye çalışıyorum, programın bazı girdilerle beslenerek test edilmesine izin veriyorlar. Giriş bir dosya olarak kabul edilir, öyle görünüyor, çünkü okumak için fscanf kullanılır. Ben ayrıştırmak çalışıyorum giriş aşağıdadır -PHP'de sekme ile ayrılmış değerler okunamıyor fscanf()

1 
50 40 30 

(2 çizgi içeren sekme ayrılmış değerler)

ardından benim kodudur -

fscanf(STDIN, "%s\n", $test_cases); 
echo "Test ".$test_cases; 

fscanf(STDIN, "%d\t%d\t%d\n", $space_sep_vals); 
echo "\n\nOutput ".$space_sep_vals; 

Ve aşağıdaki benim çıkış olduğunu -

Test 1 

Output 

Hiçbir şey 2. fscanf() tarafından ayrıştırılamıyor. Ben bunu değiştirirseniz

-

fscanf(STDIN, "%d\n", $space_sep_vals); 

İlk sayı ayrıştırır. Çıktı -

Test 1 

Output 50 

cevap

0

sorun buradadır:

fscanf(STDIN, "%d\t%d\t%d\n", $space_sep_vals); 

fscanf() biçimi dizesi 3 dönüşüm belirteçleri %d içeriyor ancak sizin okuma değerlerini depolamak için sadece bir değişkene sağladı.

Yetersiz argümanlardan dolayı, fscanf() bir Uyarı (muhtemelen PHP'nizin onları gizlemek için yanlış yapılandırıldığından görmüyorsanız) tetikler ve $space_sep_vals içinde hiçbir şey okumadan döndürür.

zaman, fscanf() geçmek (ve printf()/scanf() ailesinden başka işlevi doğru biçim dizesi temin edilen dönüştürme belirteçleri sayısını eşleşen parametre sayısı ve doküman tarif edildiği gibi bunlar çalışacaktır.

+0

Ah anladım .. Teşekkürler! Bütün ayrıştırılmış şeyi tek bir değişkene bekliyordum. C: D'de scanf() işlevlerini kullandığımdan çok uzun zaman geçti. –

İlgili konular