เหตุใด scanf จึงส่งคืน 1 เสมอ [ทำซ้ำ]

#include <stdio.h>    

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

ผลลัพธ์คือ 1 ไม่ว่าอย่างไรก็ตาม

7
1

ฉันใช้ scanf หลายครั้งและไม่เคยพบสิ่งนี้เลย ข้อตกลงที่นี่คืออะไร?


person user3643077    schedule 31.03.2017    source แหล่งที่มา
comment
คุณเพิ่งปิดบังค่า days ด้วย โค้ดส่งคืน จากฟังก์ชัน scanf   -  person t0mm13b    schedule 31.03.2017
comment
แล้วเอกสารประกอบของ scanf ที่ไม่ชัดเจนล่ะ   -  person too honest for this site    schedule 31.03.2017
comment
ถึงเวลาอ่าน man page แน่เหรอ?   -  person Weather Vane    schedule 31.03.2017


คำตอบ (2)


สิ่งนี้ถูกต้อง เนื่องจาก scanf() ส่งคืนจำนวนขององค์ประกอบที่จับคู่และแปลงสำเร็จแล้ว เมื่อพิจารณาอินพุตที่เหมาะสมในกรณีของคุณ ทุกครั้งที่อินพุตของคุณผ่านการแปลง ดังนั้นคุณจะเห็นค่า 1

โปรดทราบว่า scanf() ไม่ส่งคืน ค่าที่สแกน แต่จะเก็บค่าไว้ในอาร์กิวเมนต์ที่ส่ง

การอ้างอิง C11 บทที่ §7.21.6.4

[...] ฟังก์ชัน scanf จะส่งคืนจำนวนรายการอินพุตที่กำหนด ซึ่งอาจน้อยกว่าที่ระบุไว้ หรือแม้แต่ศูนย์ ในกรณีที่การจับคู่ล้มเหลวตั้งแต่เนิ่นๆ

person Sourav Ghosh    schedule 31.03.2017
comment
@ user3643077: คุณต้องทำอย่างอื่นที่อื่น - person Jonathan Leffler; 31.03.2017

ประเภทการส่งคืนของ scanf คือการระบุว่าอ่านจำนวนเต็มสำเร็จหรือไม่

สิ่งนี้จะทำในสิ่งที่คุณคาดหวัง

#include <stdio.h>    

int main() {
    int days = 0;
    scanf("%d", &days);
    printf("%d", days);
    return  0;
}
person Jack Gore    schedule 31.03.2017
comment
นี่ไม่ได้หมายความว่าคุณควรเพิกเฉย - person Weather Vane; 31.03.2017
comment
ขอบคุณ. ขีด จำกัด ถ่าน - person user3643077; 31.03.2017
comment
@WeatherVane เห็นด้วย แต่นี่เป็นโปรแกรมที่ง่ายมาก ฉันแค่พยายามสาธิตพฤติกรรมที่ OP ถาม - person Jack Gore; 31.03.2017