scanf()的使用及一些註意事項

来源:https://www.cnblogs.com/xpybsh/archive/2020/04/01/12616286.html
-Advertisement-
Play Games

相比較Java的鍵盤錄入,C語言的scanf有一些需要註意的細節,為了避免使用的時候踩坑,我們就來瞭解一下scanf。 scanf()是C語言的格式輸入函數,和printf函數一樣被聲明在stdio.h頭文件中,它的基本使用很簡單: 1 int a; 2 scanf("%d",&a);//程式執行到 ...


  相比較Java的鍵盤錄入,C語言的scanf有一些需要註意的細節,為了避免使用的時候踩坑,我們就來瞭解一下scanf。

  scanf()是C語言的格式輸入函數,和printf函數一樣被聲明在stdio.h頭文件中,它的基本使用很簡單:

1 int a;
2 scanf("%d",&a);//程式執行到這裡時,就等待用戶輸入;它接收的是變數的地址
          //所以一般情況下除了指針型變數和數組名要給變數加上取地址符&

註意事項一:記憶體溢出(輸入的類型要和占位符一致就不拿出來單獨啰嗦了)

1     char s[1];//長度為1,只能存一個元素
2     printf("請輸入s的值:"); 
3     //因為這裡使用的是數組名,數組名就是地址,所以不用加取地址符& 
4     scanf("%s",s); //輸入abcd 
5     printf("s=%s\n",s);       

 

 

 誒,照結果來看abcd都被存進字元數組s裡面了,但是我們知道,s是不是只能存一個位元組的數據,所以bcd已經非法占用記憶體了。雖然有時候程式看起來會正常執行,但是它會留下一些隱患。使用的時候需要註意這一點。

註意事項二:錄入多個變數

1     double m,n;
2     printf("請輸入m、n:"); 
3     //占位符不寫東西時,錄入的時候預設以空格分隔
    //如果占位符用逗號分隔,錄入的時候用逗號分隔 4 scanf("%lf%lf",&m,&n);// scanf("%lf,%lf",&m,&n); 5 printf("n=%lf m=%lf\n",m,n);

 

 

 如果我將第四行代碼換成註釋的代碼就需要這樣用:

 

 

 輸入的時候用空格分隔會發生什麼呢

 

可以看到,n的值沒能錄入。建議使用預設的分隔符,占位符中不要自己加東西。

註意事項三:char類型

 1     char name[10]="";
 2     int age=0;
 3     double sal=0.0;
 4     char gender='a';//m代表man w代表woman 
 5     
 6     printf("請輸入名字:");
 7     scanf("%s",name);//數組名,不用加&
 8      
 9     printf("請輸入年齡:");
10     scanf("%d",&age);
11      
12     printf("請輸入薪水:");
13     scanf("%lf",&sal);
14      
15     printf("請輸入性別:");
16      //scanf中char類型會出現接收上面的回車字元,一個位元組被占了,所以獲取不到錄入的數據 
17     scanf("%c",&gender); 
18     //所以再接收一次 
19     scanf("%c",&gender); 
20           
21     printf("姓名:%s \n年齡:%d \n薪水:%lf \n性別:%c",name,age,sal,gender);  

先看一下去掉19行代碼會發生什麼:

 

 

 亂吧,性別沒法輸入吧;加上19行之後,也就是再獲取一次字元之後:

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一旦被初始化就不可以被改變。 String s1 = new String("abc"); String s2 = "abc"; System.out.println(s1==s2);//false System.out.println(s1.equals(s2));//true String類覆寫 ...
  • Stream 介紹 java8添加了一個抽象流Stream,可以讓我們像寫sql一樣操作集合元素。Stream將要處理的元素看做是一種流, 在管道中傳輸,併進行處理,最後由終止操作得到處理的結果。 什麼是Stream? Stream是一個來自特定元素隊列並支持聚合操作 元素是具體類型的對象,形成一個 ...
  • 我的LeetCode:https://leetcode cn.com/u/ituring/ 我的LeetCode刷題源碼[GitHub]:https://github.com/izhoujie/Algorithmcii LeetCode 1111. 有效括弧的嵌套深度 題目 __有效括弧字元串__ ...
  • 1.高併發,高可用系統的一些思考 高併發依賴於場景和邏輯 不一定每個場景都會產生高併發,不要為了高併發而盲目的設計,過度設計帶來 的問題遠比意料之外的高併發要多很多,依賴於具體場景和行為進行分析,一個 購物類網站,搶購場景,會觸發很多的讀取商品詳情,計算庫存等操作,而且不 需要每個請求都到達支付頁面 ...
  • 常量和變數 使用關鍵字let來聲明常量 使用關鍵字var來聲明變數 可以在行中聲明多個變數或常量,且用逗號分割 Swift是類型安全的語言。如果沒有初始值,就必須標註出變數的類型。 變數和常量的名字幾乎可以使用任何字元,甚至包括Unicode字元。(註:命名不能包括 空白字元 、 數學符號 、 箭頭 ...
  • title: Java基礎語法(9) 面向對象之類的成員 blog: "CSDN" data: "Java學習路線及視頻" 1.面向過程與面向對象 1. 面向過程(POP) 與 面向對象(OOP) 二者都是一種思想,面向對象是相對於面向過程而言的。面向過程,強調的是功能行為,以函數為最小單位,考慮怎 ...
  • title: Java基礎語法(8) 數組中的常見排序演算法 blog: "CSDN" data: "Java學習路線及視頻" 1.基本概念 排序: 是電腦程式設計中的一項重要操作,其功能是指一個數據元素集合或序列重新排列成一個按數據元素某個數據項值有序的序列. 排序碼(關鍵碼): 排序依據的數據項 ...
  • 題目:一個整數,它加上100後是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少? 程式分析: 假設該數為 x。 1、則:x + 100 = n2, x + 100 + 168 = m2 2、計算等式:m2 - n2 = (m + n)(m - n) = 168 3、設置: m + n ...
一周排行
    -Advertisement-
    Play Games
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...