避雷 :C語言中 scanf() 函數的錯誤?使用!!!

1. 返回值說明

scanf函數會返回成功匹配并賦值的輸入項個數,而不是返回輸入的數據

可以通過檢查返回值數量來確認輸入是否成功。若返回值與預期不符,就表明輸入存在問題。

#include <stdio.h>int main() {int num;if (scanf("%d", &num) != 1) {  //1是指scanf 函數返回成功匹配并賦值的輸入項個數printf("輸入無效,請輸入一個整數。\n");return 1;}printf("你輸入的整數是: %d\n", num);return 0;
}
}

2. 地址傳遞

給?scanf?函數傳遞變量時,要傳遞變量的地址(即使用?&?運算符),這樣?scanf?才能把輸入的值存儲到變量所在的內存位置。

#include <stdio.h>int main() {int num;// 正確用法scanf("%d", &num);// 錯誤用法:scanf("%d", num); return 0;
}

3. 輸入緩存區問題

scanf?讀取輸入后,輸入緩沖區可能會殘留一些字符(如用戶輸入了回車->換行符?\n),這可能會對后續的輸入操作產生影響。

#include <stdio.h>int main() {int num;char ch;scanf("%d", &num);  //這里模擬用戶輸入整數后還按了回車getchar();   // 消耗掉輸入緩沖區的換行符/*
當用戶輸入整數并按下回車鍵時,回車鍵產生的換行符 \n 會留在輸入緩沖區里。
若不把這個換行符消耗掉,后續的 scanf("%c", &ch); 就會讀取到這個換行符,而非用戶輸入的字符。
getchar() 函數的作用就是從輸入緩沖區讀取一個字符,這里它讀取的就是換行符。*/scanf("%c", &ch);  //&ch 表示把用戶輸入的字符存到 ch 變量的內存地址中。return 0;
}

4. 格式控制字符串

(1)匹配輸入

格式控制字符串要和輸入的數據類型相匹配。例如,讀取整數用?%d,讀取浮點數用?%f?等。

#include <stdio.h>int main() {int num;float f;scanf("%d", &num);scanf("%f", &f);return 0;
}
(2)空格和特殊字符

格式控制字符串里的空格、制表符和換行符會匹配輸入中的任意空白字符序列。其他非格式說明符的字符必須和輸入中的字符精確匹配。

#include <stdio.h>int main() {int a, b;// 輸入時需要輸入 a=1 b=2 這樣的格式scanf("a=%d b=%d", &a, &b); 
/*
注意如果平時只需要輸入一個值,則后面不要加空格。
即:scanf("%d ", &a);  這種寫法是?錯誤的
*/return 0;
}

5. 防止緩沖區溢出

使用?scanf?讀取字符串時(%s),要留意防止緩沖區溢出。可以使用寬度限定符來限制讀取的字符數量。

#include <stdio.h>#define MAX_LENGTH 10int main() {char str[MAX_LENGTH];// 最多讀取 MAX_LENGTH - 1 個字符,為字符串結束符 '\0' 留位置scanf("%9s", str); return 0;
}

6. 不同類型的混合使用

要注意輸入格式和順序,防止出現意外結果。

#include <stdio.h>int main() {int num;char str[10];// 先輸入整數,再輸入字符串scanf("%d %s", &num, str); return 0;
}

7. 錯誤處理

scanf?函數可能會因為輸入不匹配、文件結束等原因失敗,要對這些情況進行適當的錯誤處理。

#include <stdio.h>int main() {int num;if (scanf("%d", &num) != 1) {if (feof(stdin)) {printf("輸入結束。\n");} else {printf("輸入錯誤。\n");}return 1;}return 0;
}

?因為今天又在scanf函數上栽了跟頭,所以今天終于決定將scanf容易踩的抗自我做一個總結。以上是自己結合AI還有自己的一些理解寫的一些總結。如果有不足處,歡迎評論區指出,如果對你有幫助,那可以給我一個👍贊嗎

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/74436.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/74436.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/74436.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Excel第41套全國人口普查

2. 導入網頁中的表格&#xff1a;數據-現有鏈接-考生文件夾&#xff1a;網頁-找到表格-點擊→變為√-導入刪除外部鏈接關系&#xff1a;數據-點擊鏈接-選中連接-刪除-確定&#xff08;套用表格格式-也會是刪除外部鏈接&#xff09;數值縮小10000倍&#xff08;除以10000即可&am…

WPS宏開發手冊——使用、工程、模塊介紹

目錄 系列文章前言1、開始1.1、宏編輯器使用步驟1.2、工程1.3、工程 系列文章 使用、工程、模塊介紹 JSA語法 第三篇練習練習題&#xff0c;持續更新中… 前言 如果你是開發人員&#xff0c;那么wps宏開發對你來說手拿把切。反之還挺吃力&#xff0c;需要嘻嘻&#xf…

EtherCAT轉CANopen配置CANopen側的PDO映射

EtherCAT轉CANopen配置CANopen側的PDO映射 在工業自動化領域&#xff0c;EtherCAT和CANopen是兩種廣泛應用的通信協議。它們各自具有獨特的優勢&#xff0c;但在某些應用場景下&#xff0c;需要將這兩種協議進行轉換以實現設備間的高效數據交換。本文將詳細介紹如何在使用Ethe…

【QT】Qt creator快捷鍵

Qt creator可以通過以下步驟快捷鍵査看調用關系&#xff1a; 1.打開代碼文件。 2.將光標放在你想要查看調用關系的函數名上。 3.按下鍵盤快捷鍵 CtrlshiftU。 4.彈出菜單中選擇“調用路徑”或“被調用路徑” 5.在彈出的窗口中可以查看函數的調用關系 折疊或展開代碼快捷鍵&…

【RHCE】LVS-NAT模式負載均衡實驗

目錄 題目 IP規劃 配置IP RS1 RS2 RS3 LVS client 配置RS 配置LVS 安裝lvs軟件 啟動ipvsadm服務 lvs規則匹配 ipvsadm部分選項 客戶端測試 總結 題目 使用LVS的 NAT 模式實現 3 臺RS的輪詢訪問&#xff0c;IP地址和主機自己規劃。 IP規劃 主機IP地址RS1-nat模…

排序算法(插入,希爾,選擇,冒泡,堆,快排,歸并)

1.插入排序 插入排序的主要思想是額外申請一個空間cur&#xff0c;讓cur一開始等于數組的第1號位置,設置i1&#xff0c;讓i-1的元素與其比較&#xff0c;如果arr[i-1]>arr[i]&#xff0c;就讓arr[i1] arr[i]&#xff0c;當進行到最后一次對比結束&#xff0c;i-1,再讓arr[…

Java——Random庫

一、作用 Random庫——生成隨機數 二、實現步驟 1.導包&#xff1a;import java.util.Random; #快捷鍵&#xff1a;“Random”回車鍵 2.取得隨機數&#xff1a;Random 變量1 new Random(); 3.調用隨機數&#xff1a;類型 變量2 變量1.nextInt(n); &#xff08;代表變量…

解線性方程組的直接方法:高斯消元法與其程序實現

解線性方程組的直接方法&#xff1a;高斯消元法與其程序實現 1.順序高斯消元法 設線性方程組 A x b \boldsymbol{Ax}\boldsymbol{b} Axb 如果 a k k ( k ) ≠ 0 a_{kk}^{\left( k \right)}\ne 0 akk(k)??0 可以通過高斯消元法轉化為等價的三角形線性方程組&#xff1a; …

LiteIDE中配置golang編譯生成無CMD窗口EXE的步驟

LiteIDE中配置golang編譯生成無CMD窗口EXE的步驟 一、環境配置1、設置GOROOT?2、配置GOPATH? 二、項目編譯參數設置1、新建/打開項目?2、修改編譯配置?3、其他優化選項&#xff08;可選&#xff09;? 三、構建與驗證1、編譯生成EXE?2、驗證無窗口效果? 四、注意事項 一、…

Maya基本操作

基本操作 按住ALT鍵&#xff0c;左鍵旋轉視角&#xff0c;中鍵平移視角&#xff0c;右鍵放大縮小視角。 按空格鍵切換4格視圖。 導入FBX格式文件后&#xff0c;無貼圖顯示。 按6鍵開啟。著色紋理顯示 坐標軸相關 修改菜單-左鍵最上面的虛線。固定修改選項窗口。 選中物體…

Windows打開ftp局域網共享

前提是windows已經設置好開機賬號密碼了&#xff0c;否則教程不適用 第一先打開電腦ftp共享配置 點擊保存即可 2.設置要共享到其他電腦的文件路徑&#xff08;如果你要共享整個盤你就設置整個盤&#xff0c;如果是共享盤中某文件就設置某文件&#xff0c;這里是某文件&#x…

overleaf中會議參考文獻使用什么標簽:inproceedings

overleaf中會議參考文獻使用什么標簽 會議論文在LaTeX文獻條目中應使用 @inproceedings 標簽,而非 @article。根據你提供的內容,修正后的格式如下: @inproceedings{asai2023self, author = {Asai, Akari and Wu, Zeqiu and Wang, Yizhong and Sil, Avirup and Hajishirzi,…

一文詳解redis

redis 5種數據類型 string 字符串是 Redis 里最基礎的數據類型&#xff0c;一個鍵對應一個值。 設置值 SET key value例如&#xff1a; SET name "John"獲取值 GET key例如&#xff1a; GET namelist 列表是簡單的字符串列表&#xff0c;按插入順序排序。 在列…

第16章:基于CNN和Transformer對心臟左心室的實驗分析及改進策略

目錄 1. 項目需求 2. 網絡選擇 2.1 UNet模塊 2.2 TransUnet 2.2.1 SE模塊 2.2.2 CBAM 2.3 關鍵代碼 3 對比試驗 3.1 unet 3.2 transformerSE 3.3 transformerCBAM 4. 結果分析 5. 推理 6. 下載 1. 項目需求 本文需要做的工作是基于CNN和Transformer的心臟左心室…

【AI】知識蒸餾-簡單易懂版

1 緣起 最近要準備升級材料&#xff0c;里面有一骨碌是介紹LLM相關技術的&#xff0c;知識蒸餾就是其中一個點&#xff0c; 不過&#xff0c;只分享了蒸餾過程&#xff0c;沒有講述來龍去脈&#xff0c;比如沒有講解Softmax為什么引入T、損失函數為什么使用KL散度&#xff0c;…

批量將PPT轉換成多張圖片

以下是一個使用Python將PowerPoint文件&#xff08;PPT/PPTX&#xff09;批量轉換為多張圖片的代碼示例。該方案通過comtypes庫調用本地Office的COM接口實現轉換&#xff0c;需確保已安裝Microsoft PowerPoint。 import os import comtypes.client from comtypes import COMEr…

單例模式的經典實現

單例模式&#xff08;Singleton&#xff09;是一種創建型設計模式&#xff0c;它確保一個類只有一個實例&#xff0c;并提供一個全局訪問點。在MyBatis、Redisson、AMQP等依賴包中&#xff0c;單例模式被廣泛應用。以下是這些框架中單例模式的經典實現及舉例&#xff1a; 1. My…

2024年數維杯數學建模B題生物質和煤共熱解問題的研究解題全過程論文及程序

2024年數維杯數學建模 B題 生物質和煤共熱解問題的研究 原題再現&#xff1a; 隨著全球能源需求的不斷增長和對可再生能源的追求&#xff0c;生物質和煤共熱解作為一種潛在的能源轉化技術備受關注。生物質是指可再生能源&#xff0c;源自植物和動物的有機物質&#xff0c;而煤…

靈茶山艾府基礎算法精講

day1 &#xff08;1遍&#xff09;167. 兩數之和 II - 輸入有序數組 https://leetcode.cn/problems/two-sum-ii-input-array-is-sorted/solution/san-shu-zhi-he-bu-hui-xie-xiang-xiang-sh-6wbq/ 15. 三數之和 https://leetcode.cn/problems/3sum/solution/shuang-zhi-zhen-…

圖解AUTOSAR_CP_LargeDataCOM

AUTOSAR LdCom模塊詳解 大型數據通信模塊的架構與實現 目錄 AUTOSAR LdCom模塊詳解 目錄1. 概述2. 模塊架構3. 數據流程 3.1 整體數據流3.2 數據發送流程3.3 數據接收流程4. 配置結構5. 總結1. 概述 LdCom(Large Data COM)是AUTOSAR中的輕量級通信模塊,專為高效傳輸大型或動…