⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scanfhang.html

📁 this is a mirrored site c-faq. thought might need offline
💻 HTML
字号:
<!DOCTYPE HTML PUBLIC "-//W3O//DTD W3 HTML 2.0//EN"><!-- This collection of hypertext pages is Copyright 1995-2005 by Steve Summit. --><!-- Content from the book "C Programming FAQs: Frequently Asked Questions" --><!-- (Addison-Wesley, 1995, ISBN 0-201-84519-9) is made available here by --><!-- permission of the author and the publisher as a service to the community. --><!-- It is intended to complement the use of the published text --><!-- and is protected by international copyright laws. --><!-- The on-line content may be accessed freely for personal use --><!-- but may not be published or retransmitted without explicit permission. --><!-- --><!-- this page built Sat Dec 24 21:47:46 2005 by faqproc version 2.7 --><!-- from source file stdio.sgml dated Wed Dec 21 13:07:57 2005 --><!-- corresponding to FAQ list version 4.0 --><html><!-- Mirrored from c-faq.com/stdio/scanfhang.html by HTTrack Website Copier/3.x [XR&CO'2008], Sat, 14 Mar 2009 07:58:57 GMT --><head><meta name=GENERATOR content="faqproc"><title>Question 12.17</title><link href="datafmts.html" rev=precedes><link href="scanfinterlace.html" rel=precedes><link href="index.html" rev=subdocument></head><body bgcolor="#ffffff"><a href="datafmts.html" rev=precedes><img src="../images/buttonleft.gif" alt="prev"></a><a href="index.html" rev=subdocument><img src="../images/buttonup.gif" alt="up"></a><a href="scanfinterlace.html" rel=precedes><img src="../images/buttonright.gif" alt="next"></a>&nbsp;<a href="../index-2.html"><img src="../images/buttontop.gif" alt="top/contents"></a><a href="../search.html"><img src="../images/buttonsrch.gif" alt="search"></a><hr><p><!-- qbegin --><h1>comp.lang.c FAQ list<font color=blue>&middot;</font><!-- qtag -->Question 12.17</h1><p><font face=Helvetica size=8 color=blue><b>Q:</b></font>When I readnumbersfrom the keyboard with<TT>scanf</TT>and a<TT>"%d\n"</TT>format,like this:<pre>	int n;	scanf("%d\n", &amp;n);	printf("you typed %d\n", n);</pre>it seems to hang until I type one extra line of input.</p><p><hr><p><font face=Helvetica size=8 color=blue><b>A:</b></font>Perhaps surprisingly,<TT>\n</TT>in a<TT>scanf</TT>format stringdoes<em>not</em>meanto expect a newline,but ratherto read and discard charactersas long as each is a whitespace character.(In fact,any whitespace character in a <TT>scanf</TT> format stringmeans to read and discard whitespace characters.<a href="krerr.html" rel=subdocument>[footnote]</a>Furthermore, formats like <TT>%d</TT> also discard leading whitespace,so you usually don't needexplicitwhitespace in <TT>scanf</TT> format stringsat all.)</p><p>The <TT>\n</TT> in <TT>"%d\n"</TT>thereforecauses <TT>scanf</TT> to read charactersuntil it finds a non-whitespace character,and it may need to read another linebefore it can find that non-whitespace character.In this case, the fix is just to use <TT>"%d"</TT>,without the <TT>\n</TT>(athoughyour program maythenneed to skip over the unread newline;see question <a href="scanfinterlace.html">12.18a</a>).</p><p><TT>scanf</TT> was designed for free-format input,which is seldom what you want when reading from the keyboard.By ``free format''we mean that <TT>scanf</TT> does not treat newlines differentlyfromother whitespace.The format <TT>"%d&nbsp;%d&nbsp;%d"</TT>would be equally happyreading the input<pre>	1 2 3</pre>or<pre>	1	2	3</pre></p><p>(By way of comparison,source code inlanguages like C, Pascal, and LISP is free-format,whiletraditionalBASIC and FORTRAN arenot.)</p><p>If you're insistent,<TT>scanf</TT> <em>can</em> be told to match a newline,using the ``scanset'' directive:<pre>	scanf("%d%*[\n]", &amp;n);</pre>Scansets,though powerful,won't solve all <TT>scanf</TT> problems,however.See also question <a href="scanfprobs.html">12.20</a>.</p><p>References:K&amp;R2 Sec. B1.3 pp. 245-6<br>ISO Sec. 7.9.6.2<br>H&amp;S Sec. 15.8 pp. 357-64<br></p><!-- aend --><p><hr><a href="datafmts.html" rev=precedes><img src="../images/buttonleft.gif" alt="prev"></a><a href="index.html" rev=subdocument><img src="../images/buttonup.gif" alt="up"></a><a href="scanfinterlace.html" rel=precedes><img src="../images/buttonright.gif" alt="next"></a>&nbsp;<a href="../questions.html"><img src="../images/buttontop.gif" alt="contents"></a><a href="../search.html"><img src="../images/buttonsrch.gif" alt="search"></a><br><!-- lastfooter --><a href="../about.html">about this FAQ list</a>&nbsp;<a href="../eskimo.html">about eskimo</a>&nbsp;<a href="../search.html">search</a>&nbsp;<a href="../feedback.html">feedback</a>&nbsp;<a href="copyright.html">copyright</a><p>Hosted by<a href="http://www.eskimo.com/"><img src="../../www.eskimo.com/img/link/eskitiny.gif" alt="Eskimo North"></a></body><!-- Mirrored from c-faq.com/stdio/scanfhang.html by HTTrack Website Copier/3.x [XR&CO'2008], Sat, 14 Mar 2009 07:58:57 GMT --></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -