Mengapa scanf selalu mengembalikan 1? [duplikat]

#include <stdio.h>    

int main() {
    int days = scanf("%d", &days);
    printf("%d", days);
    return 0;
}

Hasilnya adalah 1 tidak peduli apa.

7
1

Saya telah menggunakan scanf berkali-kali dan belum pernah mengalami ini. Apa masalahnya di sini?


person user3643077    schedule 31.03.2017    source sumber
comment
Anda baru saja mengalahkan nilai days dengan kode pengembalian dari fungsi scanf.   -  person t0mm13b    schedule 31.03.2017
comment
Bagaimana dengan dokumentasi scanf yang tidak jelas?   -  person too honest for this site    schedule 31.03.2017
comment
Saatnya membaca halaman manualnya, tentunya?   -  person Weather Vane    schedule 31.03.2017


Jawaban (2)


Ini benar, karena scanf() mengembalikan jumlah elemen yang berhasil dicocokkan dan dikonversi. Mempertimbangkan masukan yang tepat dalam kasus Anda, setiap kali masukan Anda lolos konversi, sehingga Anda dapat melihat nilai 1.

Perlu diperhatikan, scanf() tidak mengembalikan nilai yang dipindai itu sendiri, melainkan menyimpan nilai dalam argumen yang diteruskan.

Mengutip C11, bab ยง7.21.6.4

[...] fungsi scanf mengembalikan jumlah item masukan yang ditetapkan, yang bisa lebih sedikit dari yang disediakan, atau bahkan nol, jika terjadi kegagalan pencocokan awal.

person Sourav Ghosh    schedule 31.03.2017
comment
@ user3643077: Anda harus melakukannya secara berbeda di tempat lain. - person Jonathan Leffler; 31.03.2017

Tipe kembalian dari scanf adalah untuk menunjukkan apakah ia berhasil membaca bilangan bulat.

Ini akan melakukan apa yang Anda harapkan

#include <stdio.h>    

int main() {
    int days = 0;
    scanf("%d", &days);
    printf("%d", days);
    return  0;
}
person Jack Gore    schedule 31.03.2017
comment
Ini tidak berarti Anda harus mengabaikannya. - person Weather Vane; 31.03.2017
comment
Terima kasih. batas karakter - person user3643077; 31.03.2017
comment
@WeatherVane Setuju, tapi ini adalah program yang sangat sederhana. Saya hanya mencoba menunjukkan perilaku yang ditanyakan OP. - person Jack Gore; 31.03.2017