C++µÄÄÇЩÊ£ºÁ÷ÓëIOÀà(¶þ)
ÓÃÀ´Ò»´ÎÐÔ¼ì²â»òÉèÖöà¸ö±ê־λ¡£
1£©strm::badbitÓÃÀ´Ö¸¶¨Á÷ÒѱÀÀ£¡£Ëü±íʾϵͳ¼¶µÄ´íÎó£¬Èç²»¿É»Ö¸´µÄ¶Áд´íÎó¡£Í¨³£Çé¿öÏ£¬Ò»µ©badbit±»ÖÃ룬Á÷¾ÍÎÞ·¨ÔÙʹÓÃÁË¡£
2£©strm::failbitÓÃÀ´Ö¸³öÒ»¸öIO²Ù×÷ʧ°ÜÁË¡£
3£©strm::eofbitÓÃÀ´Ö¸³öÁ÷´ïÁËÎļþµÄ½áÊø¡£
ÔÚ·¢Éú¿É»Ö¸´´íÎóºó£¬failbit±»ÖÃ룬ÈçÆÚÍû¶ÁÈ¡Êýֵȴ¶Á³öÒ»¸ö×Ö·û´íÎó¡£ÕâÖÖÎÊÌâͨ³£¿ÉÒÔÐÞÕý£¬Á÷»¹¿ÉÒÔ¼ÌÐøÊ¹Óá£Èç¹ûµ½´ïÎļþ½áÊøÎ»Öã¬eofbitºÍfailbit¶¼»á±»ÖÃλ¡£
4£©strm::goodbitÓÃÀ´Ö¸³öÁ÷δ´¦ÓÚ´íÎó״̬¡£´ËÖµ±£Ö¤ÎªÁã¡£
goodbitµÄֵΪ0£¬±íʾÁ÷δ·¢Éú´íÎó¡£Èç¹ûbadbit¡¢failbitºÍeofbitÈÎÒ»¸öÖÃ룬Ôò¼ì²âÁ÷״̬µÄÌõ¼þ»áʧ°Ü¡£
±ê×¼¿â»¹¶¨ÒåÁËÒ»×麯ÊýÀ´²éѯÕâЩ±ê־λµÄ״̬£¬¼ÙÈçsÊÇÒ»¸öÁ÷£¬ÄÇô£º
s.eof() // ÈôÁ÷sµÄeofbitÖÃ룬Ôò·µ»Øtrue
s.fail() // ÈôÁ÷sµÄfailbit»òbadbitÖÃ룬Ôò·µ»Øtrue
s.bad() // ÈôÁ÷sµÄbadbit±»ÖÃ룬Ôò·µ»Øtrue
s.good() // ÈôÁ÷s´¦ÓÚÓÐЧ״̬£¬Ôò·µ»Øtrue
ÔÚʵ¼ÊÎÒÃÇÔÚÑ»·ÖÐÅжÏÁ÷µÄ״̬ÊÇ·ñÓÐЧʱ£¬¶¼Ö±½ÓʹÓÃÁ÷¶ÔÏó±¾Éí£¬±ÈÈ磺while(cin>>variable){cout<>variable).good()){cout<
4.2 ¹ÜÀíÌõ¼þ״̬
IOÀà¿âÌṩÁË3¸öº¯ÊýÀ´¹ÜÀíºÍÉèÖÃÁ÷µÄ״̬£º
s.clear(); // ½«Á÷sÖÐËùÓÐÌõ¼þ״̬¸´Î»£¬½«Á÷µÄ״̬ÉèÖÃΪÓÐЧ£¬µ÷ÓÃgood»á·µ»Øtrue
s.clear(flags); // ¸ù¾Ý¸ø¶¨µÄflags±ê־룬½«Á÷sÖжÔÓ¦µÄÌõ¼þ״̬¸´Î»
s.setstate(flags); // ¸ù¾Ý¸ø¶¨µÄflags±ê־룬½«Á÷sÖжÔÓ¦µÄÌõ¼þ״̬ÖÃλ¡£
s.rdstate(); // ·µ»ØÒ»¸öiostateÖµ£¬¶ÔÓ¦Á÷µ±Ç°µÄ״̬¡£
ÎÒÃÇ¿ÉÒÔÕâÑùʹÓÃÉÏÃæµÄÕâЩ³ÉÔ±º¯Êý¡£
iostream::iostate old_state = cin.rdstate(); // ¼Çסcinµ±Ç°µÄ״̬
cin.clear(); // ʹÓÃcinÓÐЧ
process_input(cin); // ʹÓÃcin
cin.setstate(old_state); // ½«cinÖÃΪÔÓÐ״̬
cin.clear(cin.rdstate() & ~cin.failbit & ~cin.badbit); // ÏÂfailbitºÍbadbit¸´Î»£¬±£³Öeofbit²»±ä¡£
5£¬IO»º³åÇø
5.1 ÊäÈ뻺³å
ÎÒÃÇÏÈ¿´Ò»¸ö¼òµ¥µÄÊäÈëÊä³ö³ÌÐò£º
¸´ÖÆ´úÂë
int main()
{
char ch;
while (cin >> ch && ch!='#')
{
cout << ch;
}
return 0;
}
¸´ÖÆ´úÂë
³ÌÐòµÄ¹¦ÄÜÊÇ£¬Ñ»·ÊäÈë×Ö·û£¬È»ºó°ÑÊäÈëµÄ×Ö·ûÏÔʽ³öÀ´£¬Óöµ½#»òcinÁ÷ʧ°Üʱ½áÊø£¬°´ÕÕ³ÌÐòµÄ±íÃæÀ´¿´£¬ÎÒÃÇÏëÒªµÄЧ¹ûÊÇÊäÈëÒ»¸ö£¬ÏÔʾһ¸ö£¬ÏñÕâÑùrroonnyy#£¬ºìÉ«´ú±íµÄÊÇÏÔʾµÄ½á¹û¡£¶øÊµ¼ÊÖÐÎÒÃǵÄÊä³öÓëÊä³öÈ´ÊÇÕâÑùµÄ£º
ronny#abc [Enter]
ronny
ÊäÈë×Ö·ûÁ¢¼´»ØÏÔÊÇ·Ç»º³å»òÖ±½ÓÊäÈëµÄÒ»¸öÐÎʽ£¬Ëü±íʾÄãËù¼üÈëµÄ×Ö·û¶ÔÕýÔڵȴýµÄ³ÌÐòÁ¢¼´±äΪ¿ÉÓá£Ïà·´£¬ÑÓ³Ù»ØÏÔÊÇ»º³åÊäÈëµÄÀý×Ó£¬ÕâÖÖÇé¿öÏÂÄãËù¼üÈëµÄ×Ö·û¿é±»ÊÕ¼¯²¢´æ´¢ÔÚÒ»¸ö±»³ÆÎª»º³åÇøµÄÁÙʱ´æ´¢ÇøÓòÖС£°´Ï»سµ¼ü¿ÉʹÄãÊäÈëµÄ×Ö·û¶Î¶Ô³ÌÐòÆð×÷Óá£
»º³åÊäÈëÒ»°ã³£ÓÃÔÚÎı¾³ÌÐòÄÚ£¬µ±ÄãÊäÈëÓдíÎóʱ£¬¾Í¿ÉÒÔʹÓÃÄãµÄ¼üÅ̸üÕýÐÞÕý´íÎó¡£µ±×îÖÕ°´Ï»سµ¼üʱ£¬Äã¾Í¿ÉÒÔ·¢ËÍÕýÈ·µÄÊäÈë¡£
¶øÔÚһЩ½»»¥ÐÔµÄÓÎÏ·ÀïÐèÒª·Ç»º³åÊäÈ룬È磺ÓÎÏ·ÀïÄã°´ÏÂÒ»¸ö¼üʱ¾ÍÒªÖ´ÐÐij¸öÃüÁî¡£
»º³å·ÖΪÁ½Àࣺ
1£©ÍêÈ«»º³å£º»º³åÇø±»³äÂúʱ±»Çå¿Õ£¨ÄÚÈÝ·¢Ë͵½ÆäÄ¿µÄµØ£©¡£ÕâÖÖÀàÐ͵Ļº³åͨ³£³öÏÖÔÚÎļþÊäÈëÖС£
2£©Ðлº³å£ºÓöµ½Ò»¸ö»»ÐÐ×Ö·ûʱ±»Çå¿Õ»º³åÇø¡£¼üÅ̵ÄÊäÈëÊDZê×¼µÄÐлº³å£¬Òò´Ë°´Ï»سµ¼ü½«Çå¿Õ»º³åÇø¡£
5.2 Êä³ö»º³å
ÉÏÃæ½²µÄÊÇÊäÈëµÄ»º³å£¬¶øC++ÖеÄÊä³öÒ²ÊÇ´æÔÚ»º³åµÄ¡£
ÿ¸öÊä³öÁ÷¶¼¹ÜÀíÒ»¸ö»º³åÇø£¬ÓÃÀ´±£´æ³ÌÐò¶ÁдµÄÊý¾Ý¡£ÀýÈ磬Èç¹ûÖ´ÐÐÏÂÃæµÄ´úÂë
os<<¡±please enter a value£º¡±;
Îı¾´®¿ÉÄÜÁ¢¼´´òÓ¡³öÀ´£¬µ«Ò²ÓпÉÄܱ»²Ù×÷ϵͳ±£´æÔÚ»º³åÇøÖУ¬ËæºóÔÙ´òÓ¡¡£ÓÐÁË»º³å»úÖÆ£¬²Ù×÷ϵͳ¾Í¿ÉÒÔ½«³ÌÐòµÄ¶à¸öÊä³ö²Ù×÷×éºÏ³Éµ¥Ò»µÄϵͳ¼¶Ð´²Ù×÷¡£ÓÉÓÚÉ豸µÄд²Ù×÷¿ÉÄܺܺÄʱ£¬ÔÊÐí²Ù×÷ϵͳ½«¶à¸öÊä³ö²Ù×÷×éºÏΪµ¥Ò»µÄÉ豸д²Ù×÷¿ÉÒÔ´øÀ´ºÜ´óµÄÐÔÄÜÌáÉý¡£
µ¼Ö»º³åˢУ¨¼´£¬Êý¾ÝÕæÕýдµ½Êä³öÉ豸»òÎļþ£©µÄÔÒòÓкࣺܶ
<1> ³ÌÐòÕý³£½áÊø£¬×÷Ϊmainº¯ÊýµÄreturn²Ù×÷µÄÒ»²¿·Ö£¬»º³åˢб»Ö´ÐС£
<2> »º³åÇøÂúʱ£¬ÐèҪˢлº³å£¬¶øºóеÄÊý¾Ý²ÅÄܼÌÐøÐ´È뻺³åÇø¡£
<3> ÎÒÃÇ¿ÉÒÔʹÓòÙ×Ý·ûendlÀ´ÏÔʽˢлº³åÇø¡£
<4> ÔÚÿ¸öÊä³öÖ®ºó£¬ÎÒÃÇ¿ÉÒÔÓòÙ×Ý·ûunitbufÉèÖÃÁ÷µÄÄÚ²¿×´Ì¬£¬À´Çå¿Õ»º³åÇø¡£Ä¬ÈÏÇé¿öÏ£¬¶ÔcerrÊÇÉèÖÃunitbufµÄ£¬Òò´Ëдµ½cerrµÄÄÚÈݶ¼ÊÇÁ¢¼´Ë¢Ðµġ£
<5> Ò»¸öÊä³öÁ÷±»¹ØÁªµ½ÁíÒ»¸öÁ÷¡£ÔÚÕâÖÖÇé¿öÏ£¬µ±¶Áд±»¹ØÁªµÄÁ÷ʱ£¬¹ØÁªµ½µÄÁ÷µÄ»º³åÇø»á±»Ë¢Ð£¬cinºÍcerr¶¼¹ØÁªµ½cout¡£Òò´Ë¶Ácin»òдcerr»áµ¼ÖÂcoutµÄ»º³åÇø±»Ë¢Ð¡£
³ýÁËendl¿ÉÒÔÍê³É»»Ðв¢Ë¢Ð»º³åÇøÍ⣬IO¿âÖл¹ÓÐÁ½¸öÀàËÆµÄ²Ù×Ý·û£ºflushºÍends¡£flushˢлº³åÇø£¬µ«²»Êä³ö£¬ÈκζîÍâµÄ×Ö·û£»endsÏò»º³åÇø²åÈëÒ»¸ö¿Õ×Ö·û£¬È»ºóˢлº³åÇø¡£
cout << "hi!" << endl; // Êä³ö hi ºÍÒ»¸ö»»Ðзû£¬È»ºóˢлº³åÇø
cout << "hi!" << flush; // Êä³öhi£¬È»ºóˢлº³åÇø£¬²»¸½¼ÓÈκζîÍâ×Ö·û
cout << "hi!" << ends; // Êä³öhiºÍÒ»¸ö¿Õ×Ö·û¡£È»ºóˢлº³åÇø
Èç¹ûÏëÿ´ÎÊä³ö²Ù×÷ºó¶¼Ë¢Ð»º³åÇø£¬ÎÒÃÇ¿ÉÒÔʹÓÃunitbuf²Ù×Ý·û¡£Ëü¸æËßÁ÷ÔÚ½ÓÏÂÀ´µÄÿ´Îд²Ù×÷ºó¶¼½øÐÐÒ»´Îflush²Ù×÷¡£¶ønounitbuf²Ù×÷·ûÔòÖØÖÃÁ÷ʹÆä»Ö¸´Ê¹ÓÃÕý³£µÄϵͳ¹ÜÀíµÄ»º³åÇøË¢Ð»úÖÆ¡£
cout << unitbuf; // ËùÓÐÊä³ö²Ù×÷ºó¶¼Á¢¼´Ë¢Ð»º³åÇø
// ÈκÎÊä³ö¶¼Á¢¼´Ë¢Ð£¬ÎÞ»º³å
cout << nounitbuf; // »Øµ½Õý³£µÄ»º³å·½Ê½
×¢Ò⣺ÈçÒª³ÌÐòÒì³£ÖÕÖ¹£¬Êä³ö»º³åÇøÊDz»»á±»Ë¢Ðµġ£µ±Ò»¸ö³ÌÐò±ÀÀ£ºó£¬ËüËùÊä³öµÄÊý¾ÝºÜ¿ÉÄÜÍ£ÁôÔÚÊä³ö»º³åÇøÖеȴý´òÓ¡¡£
ÎÒÃÇ¿ÉÒÔ½«Ò»¸öistreamÁ÷¹ØÁªµ½ÁíÒ»¸öostream£¬Ò²¿ÉÒÔ½«Ò»¸öostreamÁ÷¹ØÁªµ½ÁíÒ»¸öostream¡£
cin.tie(&cout); // ±ê×¼¿âÒѾ½«cinÓëcout¹ØÁªÔÚÒ»Æð
// s.tieÈç¹ûs¹ØÁªµ½Ò»¸öÊä³öÁ÷£¬Ôò·µ»ØÖ¸ÏòÕâ¸öÁ÷µÄÖ¸Õ룬Èç¹û¶ÔÏóδ¹ØÁªµ½Á÷£¬Ôò·µ»Ø¿ÕÖ¸Õë
ostream *old_tie = cin.tie(nullptr); // ½«cin²»ÔÙÓëÆäËûÁ÷¹ØÁª£¬Í¬Ê±old_tieÖ¸Ïòcout
cin.tie(&cerr); // ¶ÁÈ¡cin»áË¢ÐÂcerr¶ø²»ÊÇcout
cin.tie(old_tie); // ÖØ½¨cinºÍcoutµÄÕý³£¹ØÁª