سؤال

ولكن مرة أخرى، لم يتمكن من الإجابة على سؤالي أستاذي. كنت أعرف الذين قد تكون قادرة على ...

وهكذا، لم يسبق لي ان تعلمت حقا C. في C ++، وأود أن، من الواضح، استخدام عبارة cout كل الوقت. في مهمة مؤخرا، أخبرنا أستاذي للتأكد من أن تضع

setbuf( stdout , NULL );

في الجزء العلوي من main () من أجل الحصول على ناتج غير مصقول، مما يسمح لنا أن نرى الناتج بشكل صحيح.

وسؤالي هو: سيؤثر هذا البيان بيان cout، أو مجرد printf) بيان (أن أدعو؟

ويرجع الفضل في ذلك مسبقا!

هل كانت مفيدة؟

المحلول

وافتراضيا، iostreams وstdio متزامنة. المرجعي.

وهذا لا يعني أن تعديل يدويا التخزين المؤقت stdio هو فكرة جيدة، على الرغم من! قد ترغب في الاستفادة من std::endl أو std::flush (من <ostream>)، والتي قد تساعدك. منها مثلا.

std::cout << "Hello, world!" << std::endl;

أو

std::cout << "Hello, world!\n" << std::flush;

وكلا هذين تفعل الشيء نفسه. ( std::endl = طباعة الختامية التي، ثم دافق).

نصائح أخرى

وافتراضيا، إذا المعياري أو cout بطباعة إلى وحدة تحكم، ومخزنة خط الانتاج. وهذا يعني أن كل سطر جديد التي يتم طباعتها وطرد الإخراج. يمكنك الاتصال صراحة دافق () كلما أردت تجاوز السلوك فقط في حالة القول، والإخراج سوف يتم توجيهك إلى ملف وتريد استخدام ذيل -f وتحتاج بعض النواتج في الوقت الحقيقي.

وكما قال كريس، sync_with_stdio يجب ربط المعياري غير مصقول مع cout غير مصقول (افتراضيا)، ولكن إذا كان كل ما تقوم به هو استخدام cout، بدلا من استخدام setbuf على المعياري، وهو الخيار الأفضل هو استخدام <لأ href = "http://www.cplusplus.com/reference/iostream/streambuf /pubsetbuf.html "يختلط =" noreferrer "> pubsetbuf على المؤشر الذي تم إرجاعه من قبل <وأ href =" http://www.cplusplus.com/reference/iostream/ios/rdbuf.html "يختلط =" noreferrer "> rdbuf . أي:

// make cout unbuffered
std::cout.rdbuf()->pubsetbuf(0, 0);

وظيفة أخرى التي قد تكون مثيرة للاهتمام هو أن ننظر إلى href="http://www.cplusplus.com/reference/iostream/ios/tie.html" ربط .

وعادة، عندما أنه من المهم أن يظهر الإخراج على الفور، ونحن نتحدث عن روتين المالية عالية يمكن الاعتماد عليها المعقدة التي يجب تسجيل المعاملات على طول الطريق إلى القرص الصلب قبل إرساله بالفعل إلى الطرف المقابل. أو (أكثر شيوعا حالة) ونحن نريد أن نرى رسائل التصحيح حتى عندما يكون البرنامج هو تحطمها.

ومنذ كنت تدرس، سوف أفترض أنك تتعامل مع الحالة الثانية. في هذه الحالة، فإن نصيحتي هي استخدام ستدير بدلا من المعياري. ومن غير مصقول بشكل افتراضي، ويمكنك توجيه بشكل منفصل عن المعياري، ووضع الإخراج الخاص بك في مكان واحد وقطع الأشجار بك في بلد آخر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top