1. 程式人生 > >scanf函式總結:注意事項及例程

scanf函式總結:注意事項及例程

一、scanf函式小結 1>scanf函式的說明及其注意事

scanf函式說明:

    a. 如果使用這個函式,要包含一個頭檔案 stdio.h。

    b.scanf函式是一個阻塞式函式:函式執行後,會等待使用者的輸入,如果使用者不輸入任何內容,它會一直等待。

scanf函式的作用:

     接收使用者從鍵盤輸入的內容。

scanf函式的格式:

     scanf("格式控制符",輸入項的地址列表);

     例如:scanf("%d",&a);   其中a是一個變數



2>scanf函式使用注意事項

scanf使用注意事項

      注意:1)如果在輸入時,輸入了多個空格、回車、Tab都會被系統忽略的。

                 2)如果要獲取的內容是多個整數,中間輸入了多個空格、回車、Tab都會被系統忽略

       特別注意:當輸入是一個字串時,輸入字串時不能在中間輸入空格、回車、Tab,否則之後的字元都不會被輸入。



3>scanf函式執行原理:

       1)當用戶輸入內容後,使用者輸入的內容會被存放到scanf的輸入緩衝區中,然後scanf函式會根據格式控制的字元的要求,從輸入緩衝區一次取它想要的內容,如果從緩衝區中取的內容和我們的格式要求一致,則把值存放到變數中如果格式不一致,則不修改變數的值。

       2)如果緩衝區中有內容,則不會提示我們再輸入值。


4>關於scanf函式的總結:

     a.如果我們的輸入全都是%d型別的,那麼無論我們在輸入資料時時插入 空格、回車、Tab等其他字元,都會被系統忽略。

     b.如果我們輸入的是型別中含有%c型別等混合輸入,那麼就不能隨便的插入 空格、回車、Tab等其他字元,要按照scanf函式的格式來從鍵盤輸入。

例如:

         scanf("%d%c%d",&a,&ch&b);

從鍵盤輸入的格式如下:

        21a34(回車)

        小結:所以一般在混合的scanf函式書寫時最好使用如下格式:這樣不僅安全而且我們輸入時也清楚明瞭。

建議格式:scanf("%d,%c,%d",&a,&ch,&b);

從鍵盤輸入的格式:21,a,34


         總之在輸入時,一定按照scanf的“格式控制符”的格式一 一輸入。


示例如下:

實現功能:判斷字串中是否包含某個字元,如果包含,返回其首次出現的位置,否則返回-1

說明:為了使程式更加靈活改進如下:

       1>讓使用者自己輸入 字串

       2>讓使用者自己輸入要查詢 字元
例1

列印如下:
列印圖1


當找不到的列印如下

列印圖2

例2

列印如下:
列印圖3

注意:

        例1和例2是同一個例題,但是打印出來卻是大不同,倆個程式的差別就是在scanf函式的格式不同

例1中的scanf形式為scanf("%s %c",str,&c)而例2中的scanf形式為scanf("%s,%c",str,&c)。scanf("%s,%c",str,&c)形式在上面是我們推薦使用的一個格式但是為什麼會出錯?這個問題就在於scanf("%s,%c",str,&c)中是%s而不是%d、%c

這是為什麼,我個人覺得因為是當輸入asdfg,f時,由於在scanf("%s,%c",str,&c)中第一個格式控制符是%s,是輸入字串的所以即使輸入中有’,‘但是依然會把’,‘看做是普通字元。

       例1就是巧妙的應用了輸入字串時的特性(輸入字串時中間不能加 空格、回車、Tab,否則後面的字元無法輸入),所以在scanf("%s %c",str,&c)不是用逗號來隔開的而是用空格來隔開的。同樣你用Tab隔開%s和%c也是可以的。難道就不能用逗號?

       使用逗號來隔開%s和%c的用法:

例3

列印如下:
>可以找到
列印圖4

>找不到
列印圖5

>輸入格式有誤
列印圖6

總結:通過對比例2和例3發下,例3使用逗號來隔開%c,%s,scanf("%c,%s",&c,str)可以完成程式要求,例3的成功是因為%c和%s交換了位置。這樣為什麼可以?

分析:當我們輸入a,kjgsdfa時,a儲存到了字元區,kjgsdfa儲存到了字串區,所以這樣是可以的。

        通過列印圖1和列印圖3比較可以知道,我們必須按照scanf("%c,%s",&c,str)的格式來輸入,是逗號就用逗號,是空格就用空格,這和我們前面的說明是一致的。當然scanf("%c,%s",&c,str)中的','也可以被空格、Tab代替來使用。

建議:當用scanf函式有%c,%d,%s混合的輸入時,推薦使用此格式:scanf("%d,%c,%s",&a,&ch,str);

相關推薦

scanf函式總結注意事項

一、scanf函式小結 1>scanf函式的說明及其注意事 scanf函式說明:     a. 如果使用這個函式,要包含一個頭檔案 stdio.h。     b.scanf函式是一個阻塞式函式:函式執行後,會等待使用者的輸入,如果使用者不輸入任何內容,它會一直等待。 scanf函式的作用:      

vue元件通訊--注意事項經驗總結

元件間的通訊是是實際開發中非常常用的一環,如何使用對專案整體設計、開發、規範都有很實際的的作用,我在專案開發中對此深有體會,總結下vue元件間通訊的幾種方式,討論下各自的使用場景 文章對相關場景預覽 父->子元件間的資料傳遞 子->父元件間的資料傳遞

softmax函式注意事項程式碼實現

import numpy as np def softmax(x): """ softmax function """ # assert(len(x.shape) > 1, "dimension must be larger than 1") # print

iOS開發2017 蘋果APP上架更新應用版本注意事項APP版本迭代步驟方法

前幾天蘋果剛出臺新的政策協議,警告禁止使用APP熱更新,然後就收到蘋果發的警告郵件,然後並沒有在意,直到今天需要更新之前上架應用版本,才發現了問題。如果你的開發者賬號已經同意了蘋果開發者官網的最新協議

關於 UsageStatsManager.queryUsageStats 的注意事項 UsageStatsService 的簡單原理

問題背景: 目前需求統計應用的當天使用情況,在 5.0 以上有許可權 android.permission.PACKAGE_USAGE_STATS,獲取到該許可權後可以通過 UsageStatsManager.queryUsageStats(int intervalType, lon

STM32 USB軟體移植注意事項 硬體接線注意

移植了個自定義HID USB程式到STM32開發板上,成功執行,但是最近自己做的板子上(用的是F103C8T6)就不行,死活沒有反應。經過幾番除錯終於發現問題,以下做個小結: 1.一定要保證USB時鐘是48MHZ;  使用PLL作系統時鐘SCLK;而USB時鐘只能是SCLK的1

open函式的一些注意r,r+,w,w+,a,a+的區別

open函式的一些注意點 open(file[, mode[, buffering[, encoding[, errors[, newline]]]]]) (1)file檔案路徑及名稱,需要加引號如”/Users/macxunlei/Desktop/a.txt” (2)mode檔案開啟模式,r、w、a為開啟檔

C++ 函式返回指標注意事項

C++ 不支援在函式外返回區域性變數的地址,除非定義區域性變數為static 變數。 #include <iostream> #include <ctime> #include <cstdlib> using namespace std; /

Cloudera Manager 6.0.1 安裝注意事項細節

此篇基本與官方文件一致,細節不一樣的地方會標註 我的環境: server1 192.168.1.201 4核 8G 120G(固態) server2 192.168.1.202 4核 8G 120G+500G(固態) server3 192.168.1.203 4核 8G 120G+500G(

Python注意事項

註釋:# 註釋內容,井號#加一個空格,後接註釋內容;""" 註釋內容""",此為文件字串的註釋,用於描述函式是做什麼的,文件字串用三引號括起,Python使用它們來生成有關程式中函式的文件 在Python程式,每一條語句的結束都不需要如同C++,C和Java等程

C語言字串函式總結模擬實現常用的字串類函式(strlen、strcpy、strcmp........)

總結:模擬實現常用的字串類函式(strlen、strcpy、strcmp……..) 1. strlen 2. strcpy 3. strcat 4. strstr 5. strchr 6. strcmp 7. memcpy 8. m

移動端網頁佈局注意事項解決

1.winphone系統a、input標籤被點選時產生的半透明灰色背景怎麼去掉<meta name="msapplication-tap-highlight" content="no">1、關閉iOS鍵盤首字母自動大寫<input type="text" a

序列化的一些注意事項建議

本文來自《改善java的151個建議》 建議11:養成良好習慣,顯示宣告UID 我們先寫一個序列化與反序列化的工具類SerilizationUtils public class SerializationUtils { private static Strin

小程式學習之路注意事項統計

這篇文章記載在小程式的一些注意事項和遇到的bug,包括解決方案 子控制元件點選事件和父控制元件之間的傳遞 當一個view裡面包裹了了一個子view(如text控制元件),然後兩個控制元件都新增點選事件,如何讓點選text的時候父view的點選事件不觸發呢?  在點選事件t

C語言——使用scanf函式時需要注意的問題

轉自:http://blog.csdn.NET/wayne92   scanf函式我曾經在這個函式上犯過不少錯誤,也看到別人犯過的錯誤,記下來,提醒自己不要重蹈覆轍了。如果對你有用,那就更好了:)如果你發現文章中有錯誤,歡迎你不吝賜 教。希望和大家一起學習! 曾經錯

openssl 建立證書的總結注意事項

1.該文章從網上看了好多部落格,並經過實踐形成。環境為ubuntu12和ubuntu14 "========================================大綱提要和注意事項==========================================

網路程式設計中重要函式總結如何判斷socket關閉

1、阻塞模式與非阻塞模式下recv的返回值各代表什麼意思?有沒有區別?(就我目前瞭解阻塞與非阻塞recv返回值沒有區分,都是 <0:出錯,=0:連線關閉,>0接收到資料大小,特別:返回值 <0時並且(errno == EINTR || errno == EWOULDBLOCK |

Google Cloud Speech API 呼叫注意事項呼叫方式__.Net版2

在上一章已詳細說明如何讀取本地音訊檔案,呼叫GoogleCloudSpeech API轉換為文字。從中可以看出,對音訊檔案的播放長度嚴格地限制在60s以內。對此限制,Google採用將音訊檔案上傳到Cloud Storage的Bucket中,然後進行文字轉換,大

一個程式設計師的總結——開發注意事項

    一年到頭了,作為本命年的我,今年發生了太多的事情,但是不幸的是,都是好事兒,有點太過得意洋洋了,不過,不管一年順抑或不順,都是需要總結的,畢竟,總結,才能讓人成長,首先,想注意的事情就是開發注意事項。     特別想說一件事情,公司每個功能上線之前都要測試,在測試環

Mysql使用sum函式時的注意事項

MySQL的SUM函式是用來找出記錄中各種的欄位的總和。 要了解SUM函式考慮EMPLOYEE_TBL表具有以下記錄: mysql> SELECT * FROM employee_tbl; +——+——+————+——————–+ |