tft每日頭條

 > 圖文

 > c語言scanf具體代碼

c語言scanf具體代碼

圖文 更新时间:2025-01-12 02:56:48

程序是人機交互的媒介,有輸出必然也有輸入,我們開始講解如何從鍵盤輸入數據。在C語言中,有多個函數可以從鍵盤獲得用戶輸入:

  • scanf():和 printf() 類似,scanf() 可以輸入多種類型的數據。

  • getchar()、getche()、getch():這三個函數都用于輸入單個字符。

  • gets():獲取一行數據,并作為字符串處理。

c語言scanf具體代碼(C語言學習scanf的用法)1

scanf() 是最靈活、最複雜、最常用的輸入函數,但它不能完全取代其他函數,大家都要有所了解。

scanf()函數

scanf 是 scan format 的縮寫,意思是格式化掃描,也就是從鍵盤獲得用戶輸入,和 printf 的功能正好相反。

舉例

#include<stdio.h>

int main()

{

int x=0;

printf("1 1=?\n");

scanf("%d",&x); //格式:scanf("格式控制字符串",&地址列表);

if(x!=2)

對于 scanf(),輸入數據的格式要和控制字符串的格式保持一緻。

其實 scanf 和 printf 非常相似,隻是功能相反罷了:

scanf("%d %d", &a, &b); // 獲取用戶輸入的兩個整數,分别賦值給變量 a 和 b

printf("%d %d", a, b); // 将變量 a 和 b 的值在顯示器上輸出

它們都有格式控制字符串,都有變量列表。不同的是,scanf 的變量前要帶一個&符号。

&稱為取地址符号,也就是獲取變量在内存中的地址。

數據是以二進制的形式保存在内存中的,字節(Byte)是最小的可操作單位。

為了便于管理,我們給每個字節分配了一個編号,使用該字節時,隻要知道編号就可以,

就像每個學生都有學号,老師會随機抽取學号來讓學生回答問題。字節的編号是有順序的,從 0 開始,接下來是 1、2、3……

下圖是 4G 内存中每個字節的編号(以十六進制表示):

c語言scanf具體代碼(C語言學習scanf的用法)2

這個編号,就叫做地址(Address)。

int a;會在内存中分配四個字節的空間,我們将第一個字節的地址稱為變量 a 的地址,也就是&a

的值。對于整數、浮點數、字符,都要使用 & 獲取它們的地址,scanf 會根據地址把讀取到的數據寫入内存。

再來看一個 scanf 的例子:非常重要

#include <stdio.h>

int main()

{

int a, b, c;

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

printf("a b=%d\n", a b);

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

printf("a b=%d\n", a b);

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

printf("a b c=%d\n", a b c);

scanf("%d is bigger than %d", &a, &b);

printf("a-b=%d\n", a-b);

return 0;

}

運行結果:

c語言scanf具體代碼(C語言學習scanf的用法)3

第一個 scanf() 的格式控制字符串為"%d %d",中間有一個空格,而我們卻輸入了10 20,中間有多個空格。

第二個 scanf() 的格式控制字符串為"%d %d",中間有多個空格,而我們卻輸入了100 200,中間隻有一個空格。這說明 scanf() 對輸入數據之間的空格的處理比較寬松,并不要求空格數嚴格對應,多幾個少幾個無所謂,隻要有空格就行。

第三個 scanf() 的控制字符串為"%d, %d, %d",中間以逗号分隔,所以輸入的整數也要以逗号分隔。

第四個 scanf() 要求整數之間以is bigger than分隔。

用戶每次按下回車鍵,程序就會認為完成了一次輸入操作,scanf() 開始讀取用戶輸入的内容,并根據格式控制字符串從中提取有效數據,隻要用戶輸入的内容和格式控制字符串匹配,就能夠正确提取。

本質上講,用戶輸入的内容都是字符串,scanf() 完成的是從字符串中提取有效數據的過程。

最後需要注意的一點是,scanf() 讀取字符串時以空格為分隔,遇到空格就認為當前字符串結束了,所以無法讀取含有空格的字符串。

這個例子你搞懂了,簡單的scanf用法就沒問題了,所以認真看完思考。

scanf() 格式控制符彙總

格式控制符 說明

%c讀取一個單一的字符

%hd、%d、%ld讀取一個十進制整數,并分别賦值給 short、int、long 類型

%ho、%o、%lo讀取一個八進制整數(可帶前綴也可不帶),并分别賦值給 short、int、long 類型

%hx、%x、%lx讀取一個十六進制整數(可帶前綴也可不帶),并分别賦值給 short、int、long 類型

%hu、%u、%lu讀取一個無符号整數,并分别賦值給 unsigned short、unsigned int、unsigned long 類型

%f、%lf讀取一個十進制形式的小數,并分别賦值給 float、double 類型

%e、%le讀取一個指數形式的小數,并分别賦值給 float、double 類型

%g、%lg既可以讀取一個十進制形式的小數,也可以讀取一個指數形式的小數,并分别賦值給 float、double 類型

%s讀取一個字符串(以空白符為結束)

這就是scanf的基本用法了,如果不明白的就多看幾遍,最好上機自己敲一敲,改一改,怕忘記,就收藏起來以後再看。

還有scanf的用法進階的後面會寫歡迎訂閱點贊,謝謝!

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved