用scanf實現gets的功能

來源:互聯網
上載者:User
問題的提出:用scanf輸入一個字串的時候,如果輸入中碰到空格,scanf就會把空格以前的字元放進後面的字元數組。那麼如果現在要求並 不是以空格作為輸入結束的標誌,而是以最後的斷行符號作為輸入串的結束,又該如何做呢?我在一些bbs或者論壇上也看到過有人問過這個問題,一般給出的答案都 是用gets()。事實上,scanf完全可以做到這個功能。語句是這樣的:                           scnaf(”%[^/n]s”,str);現在詳細說說這個功能。首先,這個功能是針對%s的,在%和s之間可以插入[],中括弧裡面是一個字元集,如果輸入字串中的字母在這個字元集中,就會被讀進來,當碰到第一個不在這個字元集中的字母,輸入就會結束。比如:                          scanf(”%[abc]s”,str);輸入是:abccbadef輸入是:abccba其次,在中括弧裡有兩個特殊字元:^和-^表示非,即不出現在這個字元集中的字母會被接受。它必須緊接著出現在[的後面才會有這個功能,否則就會被當作一般的字元。在上面的例子裡,[^/n]表示只要不碰到斷行符號,輸入的字元就會被接受。-表示串連符,比如0-9 a-z等等,它表示了一個範圍,在這個範圍內的字元都會被接受或不被接受。如果要把-作為一般字元看待,-必須緊接著出現在]的前面。另外如果要把後括弧]也作為一般字元的話,它必須緊接著出現在[或者^的後面。在msdn裡面是可以找到scanf這個用法的,但不是很明顯,至少要點3次連結才能到那一頁,而且只是大概說了說,沒有細緻的講解。在linux的man page上對於這個問題有詳盡的解釋,如果有興趣的可以去看看。 補充,這是本人在前一階段偶然看到的文章,摘抄了下來,忘了記出處了……今天整理筆記,決定貼到部落格上和大家分享,如果作者看到未註明詳細出處,忘見諒!

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.