คำถามติดแท็ก printf

"printf" เป็นฟังก์ชันทั่วไปสำหรับเอาต์พุตที่จัดรูปแบบ C และภาษาอื่น ๆ อีกมากมายมีฟังก์ชันที่เกี่ยวข้องทั้งหมด ใช้แท็กนี้เฉพาะในกรณีที่คำถามเกี่ยวข้องโดยตรงกับ "printf" หรือฟังก์ชันที่เกี่ยวข้อง

6
ใช้ printf กับสตริงที่สิ้นสุดที่ไม่ใช่ค่าว่าง
สมมติว่าคุณมีสตริงที่ไม่nullถูกยกเลิกและคุณรู้ขนาดที่แน่นอนแล้วคุณจะพิมพ์สตริงนั้นด้วยprintfภาษา C ได้อย่างไร? ฉันจำวิธีการดังกล่าวได้ แต่ตอนนี้หาคำตอบไม่ได้ ...
108 c  string  format  printf 

8
เกิดอะไรขึ้นกับ“% n” ของ Java ใน printf
ฉันกำลังอ่าน Effective Java และใช้%nสำหรับอักขระขึ้นบรรทัดใหม่ทุกที่ ฉันใช้\nค่อนข้างประสบความสำเร็จสำหรับการขึ้นบรรทัดใหม่ในโปรแกรม Java ข้อใด "ถูกต้อง" เกิดอะไรขึ้น\n? เหตุใด Java จึงเปลี่ยนรูปแบบ C นี้
107 java  newline  printf 

13
หลีกเลี่ยงการลากศูนย์ใน printf ()
ฉันมักจะสะดุดกับตัวระบุรูปแบบสำหรับฟังก์ชันตระกูล printf () สิ่งที่ฉันต้องการคือสามารถพิมพ์คู่ (หรือลอย) โดยมีจำนวนหลักสูงสุดที่กำหนดหลังจุดทศนิยม ถ้าฉันใช้: printf("%1.3f", 359.01335); printf("%1.3f", 359.00999); ฉันเข้าใจ 359.013 359.010 แทนที่จะเป็นที่ต้องการ 359.013 359.01 ใครสามารถช่วยฉัน?
107 c  printf 

5
Python หลายวิธีในการจัดรูปแบบสตริง - เวอร์ชันเก่า (กำลังจะ) เลิกใช้แล้วหรือไม่?
Python มีอย่างน้อยหกวิธีในการจัดรูปแบบสตริง: In [1]: world = "Earth" # method 1a In [2]: "Hello, %s" % world Out[2]: 'Hello, Earth' # method 1b In [3]: "Hello, %(planet)s" % {"planet": world} Out[3]: 'Hello, Earth' # method 2a In [4]: "Hello, {0}".format(world) Out[4]: 'Hello, Earth' # method 2b In [5]: "Hello, {planet}".format(planet=world) Out[5]: …

1
Haskell printf ทำงานอย่างไร
ความปลอดภัยของ Haskell ไม่เป็นสองรองใครในภาษาที่พิมพ์ขึ้นเอง แต่มีเวทมนตร์ลึก ๆ เกิดขึ้นกับText.Printfที่ดูเหมือนจะเป็นประเภทว่องไว > printf "%d\n" 3 3 > printf "%s %f %d" "foo" 3.3 3 foo 3.3 3 ความมหัศจรรย์ที่อยู่เบื้องหลังสิ่งนี้คืออะไร? วิธีสามารถText.Printf.printfฟังก์ชั่นใช้การขัดแย้ง variadic เช่นนี้หรือไม่ เทคนิคทั่วไปที่ใช้ในการอนุญาตให้มีอาร์กิวเมนต์ตัวแปรใน Haskell คืออะไรและทำงานอย่างไร (หมายเหตุด้านข้าง: ความปลอดภัยบางประเภทหายไปเมื่อใช้เทคนิคนี้) > :t printf "%d\n" "foo" printf "%d\n" "foo" :: (PrintfType ([Char] -> t)) => t

7
การพิมพ์อักขระเลขฐานสิบหกใน C
ฉันกำลังพยายามอ่านเป็นบรรทัดของอักขระจากนั้นพิมพ์เลขฐานสิบหกที่เทียบเท่าของอักขระ ตัวอย่างเช่นถ้าฉันมีสตริงที่"0xc0 0xc0 abc123"2 ตัวแรกเป็นc0เลขฐานสิบหกและอักขระที่เหลืออยู่abc123ใน ASCII ฉันควรจะได้รับ c0 c0 61 62 63 31 32 33 อย่างไรก็ตามการprintfใช้%xให้ฉัน ffffffc0 ffffffc0 61 62 63 31 32 33 ฉันจะได้ผลลัพธ์ที่ต้องการโดยไม่ต้องทำ"ffffff"อย่างไร และเหตุใดจึงมีเพียง c0 (และ 80) เท่านั้นที่มีffffffแต่อักขระอื่น ๆ ไม่ได้?
104 c  hex  printf 

8
ตัวระบุความกว้าง Printf เพื่อรักษาความแม่นยำของค่าทศนิยม
มีตัวprintfระบุความกว้างที่สามารถนำไปใช้กับตัวระบุจุดลอยตัวที่จะจัดรูปแบบผลลัพธ์โดยอัตโนมัติเป็นจำนวนหลักสำคัญที่จำเป็นเช่นนั้นเมื่อสแกนสตริงกลับเข้าไปจะได้รับค่าทศนิยมเดิมหรือไม่ ตัวอย่างเช่นสมมติว่าฉันพิมพ์ a floatด้วยความแม่นยำของ2ตำแหน่งทศนิยม: float foobar = 0.9375; printf("%.2f", foobar); // prints out 0.94 เมื่อฉันสแกนผลลัพธ์0.94ฉันไม่มีการรับประกันที่เป็นไปตามมาตรฐานว่าฉันจะได้ค่า0.9375ทศนิยมดั้งเดิมกลับคืนมา (ในตัวอย่างนี้ฉันอาจจะไม่) ฉันต้องการวิธีบอกprintfให้พิมพ์ค่าทศนิยมไปยังจำนวนหลักที่จำเป็นโดยอัตโนมัติเพื่อให้แน่ใจว่าสามารถสแกนกลับไปเป็นค่าเดิมที่ส่งไปให้printfได้ ฉันสามารถใช้มาโครบางตัวfloat.hเพื่อหาค่าความกว้างสูงสุดที่จะส่งผ่านไปprintfได้ แต่มีตัวระบุให้พิมพ์โดยอัตโนมัติตามจำนวนหลักที่มีนัยสำคัญหรือไม่หรืออย่างน้อยก็เป็นความกว้างสูงสุด

11
เหตุใด printf ที่มีอาร์กิวเมนต์เดียว (ไม่มีตัวระบุการแปลง) จึงเลิกใช้งาน
ในหนังสือที่ฉันกำลังอ่านมีเขียนว่าprintfด้วยอาร์กิวเมนต์เดียว (โดยไม่มีตัวระบุการแปลง) จะเลิกใช้งานแล้ว ขอแนะนำให้เปลี่ยน printf("Hello World!"); ด้วย puts("Hello World!"); หรือ printf("%s", "Hello World!"); ใครช่วยบอกทีว่าทำไมถึงprintf("Hello World!");ผิด? มีเขียนไว้ในหนังสือว่ามีช่องโหว่ ช่องโหว่เหล่านี้คืออะไร?

5
อักขระหลีก "backspace" '\ b': พฤติกรรมที่ไม่คาดคิด?
ในที่สุดฉันก็อ่านK&Rและฉันได้เรียนรู้บางอย่างในสองสามหน้าแรกว่ามีอักขระหลีกย้อน\bกลับ ดังนั้นฉันไปทดสอบดูและมีพฤติกรรมแปลก ๆ : #include <stdio.h> main () { printf("hello worl\b\bd\n"); } ผลลัพธ์คือ hello wodl ใครช่วยอธิบายเรื่องนี้

4
ตัวระบุรูปแบบ printf สำหรับ uint32_t และ size_t
ฉันมีดังต่อไปนี้ size_t i = 0; uint32_t k = 0; printf("i [ %lu ] k [ %u ]\n", i, k); ฉันได้รับคำเตือนต่อไปนี้เมื่อคอมไพล์: format ‘%lu’ expects type ‘long unsigned int’, but argument has type ‘uint32_t’ เมื่อฉันวิ่งโดยใช้เฝือกฉันได้รับสิ่งต่อไปนี้: Format argument 1 to printf (%u) expects unsigned int gets size_t: k ขอบคุณมากสำหรับคำแนะนำใด ๆ
101 c  printf 

6
วิธีจัดรูปแบบสตริงโดยใช้ printf () เพื่อให้ได้ความยาวเท่ากันในเอาต์พุต
ฉันมีสองฟังก์ชั่นหนึ่งที่ผลิตข้อความเช่นStarting initialization...และอื่น ๆ ซึ่งการตรวจสอบรหัสกลับและผล"Ok", หรือ"Warning" "Error"อย่างไรก็ตามเอาต์พุตที่ผลิตมีความยาวต่างกัน: Starting initialization...Ok. Checking init scripts...Ok. ฉันจะได้อะไรแบบนี้: Starting initialization... Ok. Checking init scripts... Ok.

9
ทำความสะอาดโค้ดเพื่อ printf size_t ใน C ++ (หรือ: ใกล้เคียงที่สุดกับ C99 ของ% z ใน C ++)
ฉันมีรหัส C ++ ที่พิมพ์size_t: size_t a; printf("%lu", a); ฉันต้องการให้สิ่งนี้รวบรวมโดยไม่มีคำเตือนทั้งในสถาปัตยกรรม 32- และ 64 บิต ถ้าเป็น C99 ฉันสามารถprintf("%z", a);ใช้ได้ แต่ AFAICT %zไม่มีอยู่ในภาษา C ++ มาตรฐานใด ๆ ดังนั้นฉันต้องทำแทน printf("%lu", (unsigned long) a); ซึ่งน่าเกลียดจริงๆ หากไม่มีสิ่งอำนวยความสะดวกสำหรับการพิมพ์size_tในภาษาฉันสงสัยว่าเป็นไปได้หรือไม่ที่จะเขียน printf wrapper หรือบางอย่างเช่นนั้นจะแทรก casts ที่เหมาะสมลงในsize_ts เพื่อกำจัดคำเตือนของคอมไพเลอร์ปลอมในขณะที่ยังคงรักษาสิ่งที่ดีไว้ ความคิดใด ๆ ? แก้ไขเพื่อชี้แจงว่าเหตุใดฉันจึงใช้ printf: ฉันมีฐานรหัสที่ค่อนข้างใหญ่ซึ่งฉันกำลังทำความสะอาด มันใช้ printf wrapper เพื่อทำสิ่งต่างๆเช่น "เขียนคำเตือนบันทึกลงในไฟล์และอาจออกจากโค้ดด้วยข้อผิดพลาด" ฉันอาจรวบรวม C …
96 c++  printf  size-t 

8
การใช้สีกับ printf
เมื่อเขียนเช่นนี้จะแสดงข้อความเป็นสีน้ำเงิน: printf "\e[1;34mThis is a blue text.\e[0m" แต่ฉันต้องการกำหนดรูปแบบใน printf: printf '%-6s' "This is text" ตอนนี้ฉันได้ลองหลายตัวเลือกในการเพิ่มสี แต่ไม่สำเร็จ: printf '%-6s' "\e[1;34mThis is text\e[0m" ฉันพยายามเพิ่มรหัสแอตทริบิวต์เพื่อจัดรูปแบบโดยไม่ประสบความสำเร็จ สิ่งนี้ใช้ไม่ได้และฉันไม่พบตัวอย่างที่เพิ่มสีลงใน printf ซึ่งได้กำหนดรูปแบบไว้ในกรณีของฉัน
94 linux  bash  colors  printf 


5
ใน C คำสั่ง printf แบบยาวสามารถแบ่งออกเป็นหลายบรรทัดได้หรือไม่?
ฉันมีข้อความต่อไปนี้: printf("name: %s\targs: %s\tvalue %d\tarraysize %d\n", sp->name, sp->args, sp->value, sp->arraysize); ฉันต้องการที่จะทำลายมัน ฉันลองทำตามขั้นตอนต่อไปนี้ แต่ไม่ได้ผล printf("name: %s\t args: %s\t value %d\t arraysize %d\n", sp->name, sp->args, sp->value, sp->arraysize); ฉันจะทำลายมันได้อย่างไร?
88 c  printf 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.