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

ไลบรารี C ++ iostream เป็นไลบรารีเชิงวัตถุที่จัดเตรียมฟังก์ชันอินพุตและเอาต์พุตโดยใช้สตรีม คลาส iostreams รองรับ I / O ประเภทบิวท์อินที่ปลอดภัยและสามารถขยายเพื่อรองรับประเภทที่ผู้ใช้กำหนดโดยการโอเวอร์โหลดตัวดำเนินการ >> และ <<

10
ทำไมการอ่านบรรทัดจาก stdin ช้ากว่ามากใน C ++ มากกว่า Python?
ฉันต้องการเปรียบเทียบบรรทัดการอ่านของอินพุตสตริงจาก stdin โดยใช้ Python และ C ++ และรู้สึกตกใจเมื่อเห็นว่ารหัส C ++ ของฉันมีลำดับความสำคัญช้ากว่าโค้ด Python ที่เทียบเท่า เนื่องจาก C ++ ของฉันเป็นสนิมและฉันยังไม่ใช่ผู้เชี่ยวชาญ Pythonista โปรดบอกฉันว่าฉันทำอะไรผิดหรือถ้าฉันเข้าใจผิดบางอย่าง (คำตอบ TLDR: รวมคำสั่ง: cin.sync_with_stdio(false)หรือใช้fgetsแทน ผลลัพธ์ TLDR: เลื่อนลงมาจนสุดด้านล่างของคำถามแล้วดูที่ตาราง) รหัส C ++: #include &lt;iostream&gt; #include &lt;time.h&gt; using namespace std; int main() { string input_line; long line_count = 0; time_t start = time(NULL); int …

4
ทำไม iostream :: eof ภายในสภาพลูป (เช่น `while (! stream.eof ())`) ถือว่าผิด
ฉันเพิ่งพบความคิดเห็นในคำตอบนี้บอกว่าการใช้iostream::eofในสภาพลูปคือ "เกือบผิดแน่นอน" ฉันมักจะใช้สิ่งที่ชอบwhile(cin&gt;&gt;n)- ซึ่งฉันเดาว่าจะตรวจสอบ EOF โดยปริยาย เหตุใดการตรวจสอบว่ามีการใช้while (!cin.eof())ผิดอย่างชัดเจนหรือไม่ มันแตกต่างจากการใช้scanf("...",...)!=EOFใน C (ซึ่งฉันมักจะใช้ไม่มีปัญหา)?
595 c++  iostream  c++-faq 

12
C ++:“ std :: endl” กับ“ \ n”
หนังสือ C ++ หลายเล่มมีรหัสตัวอย่างเช่นนี้ ... std::cout &lt;&lt; "Test line" &lt;&lt; std::endl; ... ดังนั้นฉันก็ทำเช่นนั้นเสมอ แต่ฉันเห็นรหัสจำนวนมากจากนักพัฒนาที่ทำงานเช่นนี้แทน: std::cout &lt;&lt; "Test line\n"; มีเหตุผลทางเทคนิคหรือไม่ที่จะเลือกอย่างใดอย่างหนึ่งหรือเป็นเรื่องของรูปแบบการเข้ารหัสหรือไม่?


11
ฉันจะพิมพ์ค่าสองเท่าด้วยความแม่นยำเต็มที่ใช้ cout ได้อย่างไร
ดังนั้นฉันจึงได้คำตอบสำหรับคำถามสุดท้ายของฉัน(ฉันไม่รู้ว่าทำไมฉันไม่คิดอย่างนั้น) ฉันกำลังพิมพ์การdoubleใช้coutที่ปัดเศษเมื่อฉันไม่ได้คาดหวัง ฉันจะcoutพิมพ์doubleด้วยความแม่นยำได้อย่างไร

5
วิธีการโอเวอร์โหลดโอเปอเรเตอร์ << สำหรับ ostream อย่างถูกต้องหรือไม่
ฉันกำลังเขียนไลบรารีเมทริกซ์ขนาดเล็กใน C ++ สำหรับการดำเนินการเมทริกซ์ อย่างไรก็ตามคอมไพเลอร์ของฉันบ่นซึ่งก่อนหน้านั้นไม่ได้ รหัสนี้ถูกวางไว้บนหิ้งเป็นเวลา 6 เดือนและในระหว่างที่ฉันอัพเกรดคอมพิวเตอร์ของฉันจากเดเบียนจำหลักเป็นเลนนี่ (g ++ (เดเบียน 4.3.2-1.1) 4.3.2) แต่ฉันมีปัญหาเดียวกันในระบบ Ubuntu ที่มี g ++ เดียวกัน . นี่คือส่วนที่เกี่ยวข้องของคลาสเมทริกซ์ของฉัน: namespace Math { class Matrix { public: [...] friend std::ostream&amp; operator&lt;&lt; (std::ostream&amp; stream, const Matrix&amp; matrix); } } และ "การใช้งาน": using namespace Math; std::ostream&amp; Matrix::operator &lt;&lt;(std::ostream&amp; stream, const Matrix&amp; …

11
วิธีการพิมพ์ (ใช้ cout) ตัวเลขในรูปแบบไบนารี?
ฉันกำลังเรียนหลักสูตรวิทยาลัยเกี่ยวกับระบบปฏิบัติการและเรากำลังเรียนรู้วิธีการแปลงจากเลขฐานสองเป็นเลขฐานสิบหก, ทศนิยมให้เป็นเลขฐานสิบหกเป็นต้นและวันนี้เราเพิ่งได้เรียนรู้วิธีการจัดเก็บหมายเลขลงนาม / ไม่ได้ลงนามในหน่วยความจำ + 1) เรามีแบบฝึกหัดสองข้อให้ทำบนกระดาษและฉันต้องการตรวจสอบคำตอบก่อนส่งงานให้ครู ฉันเขียนโปรแกรม C ++ สำหรับแบบฝึกหัดแรก แต่ตอนนี้ฉันติดอยู่กับวิธีที่ฉันสามารถตรวจสอบคำตอบของฉันด้วยปัญหาต่อไปนี้: char a, b; short c; a = -58; c = -315; b = a &gt;&gt; 3; และเราจำเป็นต้องแสดงแทน binary ในหน่วยความจำของa, และbc ฉันทำมันลงบนกระดาษและให้ผลลัพธ์ต่อไปนี้กับฉัน (การแทนเลขฐานสองทั้งหมดในหน่วยความจำของตัวเลขหลังจากส่วนเติมเต็มของทั้งสอง): a = 00111010 (มันเป็นถ่านดังนั้น 1 ไบต์) b = 00001000 (มันเป็นถ่านดังนั้น 1 ไบต์) c = 11111110 11000101 …

4
มาตรฐาน C ++ มีประสิทธิภาพต่ำสำหรับ iostreams หรือฉันแค่จัดการกับการนำไปใช้ที่ไม่ดี?
ทุกครั้งที่ฉันพูดถึงประสิทธิภาพที่ช้าของ C ++ ไลบรารีมาตรฐาน iostreams ฉันจะได้พบกับคลื่นแห่งความไม่เชื่อ แต่ฉันมีผลลัพธ์ของ profiler ที่แสดงเวลาจำนวนมากที่ใช้ในโค้ดไลบรารี iostream (การปรับให้เหมาะสมเต็มที่ของคอมไพเลอร์), และการสลับจาก iostreams ไปเป็น I / O API เฉพาะระบบปฏิบัติการและการจัดการบัฟเฟอร์แบบกำหนดเอง สิ่งที่เป็นงานพิเศษคือห้องสมุดมาตรฐาน C ++ ทำมันเป็นสิ่งจำเป็นโดยมาตรฐานและเป็นประโยชน์ในการปฏิบัติ? หรือคอมไพเลอร์บางตัวมีการใช้งาน iostreams ที่สามารถแข่งขันกับการจัดการบัฟเฟอร์ด้วยตนเองได้หรือไม่? มาตรฐาน เพื่อให้เรื่องต่าง ๆ มีความเคลื่อนไหวฉันได้เขียนโปรแกรมสั้น ๆ สองข้อเพื่อออกกำลังกายการบัฟเฟอร์ภายใน iostreams: วางข้อมูลไบนารีลงในostringstream http://ideone.com/2PPYw ใส่ข้อมูลไบนารีลงในchar[]บัฟเฟอร์http://ideone.com/Ni5ct วางข้อมูลไบนารีลงในhttp://ideone.com/Mj2Fi ที่vector&lt;char&gt;ใช้back_inserter ใหม่ : ตัวvector&lt;char&gt;วนซ้ำอย่างง่ายhttp://ideone.com/9iitv ใหม่ : ใส่ข้อมูลไบนารีโดยตรงในstringbuf http://ideone.com/qc9QA ใหม่ : ตัวvector&lt;char&gt;วนซ้ำแบบง่ายพร้อมการตรวจสอบขอบเขตhttp://ideone.com/YyrKy โปรดทราบว่าostringstreamและstringbufรุ่นต่างๆจะทำงานซ้ำน้อยลงเพราะมันช้ากว่ามาก เมื่อวันที่ …

15
คุณสามารถอธิบายแนวคิดของสตรีมได้หรือไม่
ฉันเข้าใจว่าสตรีมเป็นตัวแทนของลำดับไบต์ สตรีมแต่ละตัวมีวิธีการอ่านและเขียนไบต์ไปยังที่เก็บข้อมูลสำรองที่กำหนด แต่ประเด็นของกระแสคืออะไร เหตุใดตัวเก็บข้อมูลสำรองจึงไม่ใช่สิ่งที่เราโต้ตอบด้วย ไม่ว่าจะด้วยเหตุผลใดแนวคิดนี้ก็ไม่ได้คลิกเพื่อฉัน ฉันได้อ่านบทความมากมาย แต่ฉันคิดว่าฉันต้องการอุปมาอุปมัยหรืออะไรสักอย่าง

11
ใครเป็นผู้สร้าง / ออกแบบ IOStream ของ C ++ และจะยังถือว่าได้รับการออกแบบมาอย่างดีตามมาตรฐานปัจจุบันหรือไม่ [ปิด]
ปิด . คำถามนี้เป็นคำถามความคิดเห็นตาม ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่? อัปเดตคำถามเพื่อให้สามารถตอบพร้อมข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน2 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ก่อนอื่นอาจดูเหมือนว่าฉันกำลังขอความคิดเห็นส่วนตัว แต่นั่นไม่ใช่สิ่งที่ฉันตามมา ฉันชอบที่จะได้ยินข้อโต้แย้งที่มีเหตุผลในหัวข้อนี้ ในความหวังในการได้รับข้อมูลเชิงลึกบางเป็นวิธีการกรอบลำธาร / อนุกรมที่ทันสมัยควรจะได้รับการออกแบบที่ฉันเพิ่งได้ตัวเองสำเนาของหนังสือc ++ มาตรฐาน IOStreams และตำแหน่งที่ตั้งโดย Angelika แลงเกอร์และเคลาส์ Kreft ฉันคิดว่าถ้า IOStreams ไม่ได้รับการออกแบบมาอย่างดีมันจะไม่ทำให้มันอยู่ในไลบรารีมาตรฐาน C ++ ตั้งแต่แรก หลังจากได้อ่านส่วนต่างๆของหนังสือเล่มนี้ฉันเริ่มมีข้อสงสัยว่า IOStreams สามารถเปรียบเทียบกับเช่น STL จากมุมมองทางสถาปัตยกรรมโดยรวมได้หรือไม่ อ่านเช่นบทสัมภาษณ์ของ Alexander Stepanov ("นักประดิษฐ์" ของ STL)เพื่อเรียนรู้เกี่ยวกับการตัดสินใจในการออกแบบบางอย่างที่เข้าสู่ STL สิ่งที่ทำให้ฉันประหลาดใจเป็นพิเศษ : ดูเหมือนว่าจะไม่ทราบว่าใครเป็นผู้รับผิดชอบการออกแบบโดยรวมของ IOStreams (ฉันชอบอ่านข้อมูลพื้นฐานเกี่ยวกับเรื่องนี้ - มีใครรู้แหล่งข้อมูลดีๆบ้างไหม); เมื่อคุณเจาะลึกลงไปใต้พื้นผิวของ IOStreams ในทันทีเช่นหากคุณต้องการขยาย …
128 c++  iostream 

7
เรียกคืนสถานะของ std :: cout หลังจากจัดการมัน
สมมติว่าฉันมีรหัสดังนี้: void printHex(std::ostream&amp; x){ x&lt;&lt;std::hex&lt;&lt;123; } .. int main(){ std::cout&lt;&lt;100; // prints 100 base 10 printHex(std::cout); //prints 123 in hex std::cout&lt;&lt;73; //problem! prints 73 in hex.. } คำถามของฉันคือมีวิธีใดในการ 'กู้คืน' สถานะกลับเป็นสถานะcoutเดิมหลังจากกลับจากฟังก์ชันหรือไม่? (ค่อนข้างเหมือนstd::boolalphaและstd::noboolalpha.. )? ขอบคุณ.
106 c++  iostream 

3
เหตุใด std :: getline () จึงข้ามอินพุตหลังจากการแยกรูปแบบ
ฉันมีโค้ดต่อไปนี้ที่แจ้งให้ผู้ใช้ทราบชื่อและสถานะ: #include &lt;iostream&gt; #include &lt;string&gt; int main() { std::string name; std::string state; if (std::cin &gt;&gt; name &amp;&amp; std::getline(std::cin, state)) { std::cout &lt;&lt; "Your name is " &lt;&lt; name &lt;&lt; " and you live in " &lt;&lt; state; } } สิ่งที่ฉันพบคือชื่อถูกแยกออกมาสำเร็จแล้ว แต่ไม่ใช่สถานะ นี่คืออินพุตและเอาต์พุตผลลัพธ์: Input: "John" "New Hampshire" Output: "Your name is …
105 c++  input  iostream  istream  c++-faq 

7
cout, cerr, Clog ของ iostream header ใน c ++ ต่างกันอย่างไร? เมื่อใดควรใช้อันไหน?
ฉันพยายามค้นคว้าความแตกต่างระหว่างcout, cerrและclogบนอินเทอร์เน็ต แต่ไม่สามารถหาคำตอบที่สมบูรณ์ ฉันยังไม่ชัดเจนว่าจะใช้เมื่อใด ใครช่วยอธิบายให้ฉันฟังผ่านโปรแกรมง่ายๆและอธิบายสถานการณ์ที่สมบูรณ์แบบว่าเมื่อใดควรใช้อันไหน ผมเข้าเยี่ยมชมเว็บไซต์นี้ซึ่งแสดงให้เห็นโปรแกรมขนาดเล็กบนcerrและแต่การส่งออกที่ได้รับมากกว่านอกจากนี้ยังสามารถรับใช้clog coutฉันสับสนกับการใช้งานของแต่ละคน
104 c++  iostream  cout  clog 

4
ตัวดำเนินการ << ต้องใช้อาร์กิวเมนต์เดียว
อา #include "logic.h" ... class A { friend ostream&amp; operator&lt;&lt;(ostream&amp;, A&amp;); ... }; logic.cpp #include "a.h" ... ostream&amp; logic::operator&lt;&lt;(ostream&amp; os, A&amp; a) { ... } ... เมื่อฉันรวบรวมมันบอกว่า: std :: ostream &amp; logic :: operator &lt;&lt; (std :: ostream &amp;, A &amp;) 'ต้องใช้อาร์กิวเมนต์เดียว อะไรคือปัญหา?

7
จะอ่านทีละบรรทัดหรือไฟล์ข้อความทั้งหมดพร้อมกันได้อย่างไร?
ฉันอยู่ในบทช่วยสอนที่แนะนำไฟล์ (วิธีอ่านและเขียนจาก \ ถึงไฟล์) ก่อนอื่นนี่ไม่ใช่การบ้านนี่เป็นเพียงความช่วยเหลือทั่วไปที่ฉันกำลังมองหา ฉันรู้วิธีอ่านทีละคำ แต่ไม่รู้วิธีอ่านทีละบรรทัดหรืออ่านไฟล์ข้อความทั้งหมดอย่างไร จะเกิดอะไรขึ้นถ้าไฟล์ของฉันมี 1,000 คำ? ไม่สามารถอ่านแต่ละคำได้ ไฟล์ข้อความของฉันชื่อ (อ่าน) มีดังต่อไปนี้: ฉันชอบเล่นเกมฉันชอบอ่านหนังสือฉันมีหนังสือ 2 เล่ม นี่คือสิ่งที่ฉันทำสำเร็จแล้ว: #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; int main (){ ifstream inFile; inFile.open("Read.txt"); inFile &gt;&gt; มีวิธีใดบ้างที่เป็นไปได้ในการอ่านทั้งไฟล์พร้อมกันแทนที่จะอ่านแต่ละบรรทัดหรือแยกแต่ละคำ

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