最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言數(shù)據(jù)類(lèi)型和變量使用及說(shuō)明

 更新時(shí)間:2026年01月17日 13:57:34   作者:Pihria  
本文介紹了C語(yǔ)言中的數(shù)據(jù)類(lèi)型、變量、算術(shù)和賦值操作符、單目操作符、強(qiáng)制類(lèi)型轉(zhuǎn)換以及輸入輸出函數(shù)printf和scanf的使用

一、數(shù)據(jù)類(lèi)型介紹

所謂“類(lèi)型”,就是相似的數(shù)據(jù)所擁有的共同特征,編譯器只有知道了數(shù)據(jù)的類(lèi)型,才知道怎么操作 數(shù)據(jù)。

使用整型類(lèi)型來(lái)描述整數(shù),使用字符類(lèi)型來(lái)描述字符,使用浮點(diǎn)型類(lèi)型來(lái)描述小數(shù)。

C語(yǔ)言的數(shù)據(jù)類(lèi)型有倆種:內(nèi)置類(lèi)型和自定義類(lèi)型:

  • 內(nèi)置類(lèi)型:字符型、整型、浮點(diǎn)型、布爾類(lèi)型
  • 自定義類(lèi)型:數(shù)組、結(jié)構(gòu)體-struct、枚舉-enum、聯(lián)合體-union

1.1字符型

字符的英文單詞是 character ,在C語(yǔ)言中使用 char 表示字符類(lèi)型。

char             //character
signed char;     //有符號(hào)的
unsigned char;   //無(wú)符號(hào)的

1.2整型

整數(shù)的英文單詞是 integer ,在C語(yǔ)言中使用 int 表示整型類(lèi)型。

//短整型  
short [int]
[signed] short [int]
unsigned short [int]

//整型 
int
[signed] int
unsigned int

//?整型 
long [int]
[signed] long [int]
unsigned long [int]

//更?的整型 
//C99中引? 
long long [int]
[signed] long long [int]
unsigned long long [int]

1.3浮點(diǎn)型

float        //單精度浮點(diǎn)型
double       //雙精度浮點(diǎn)型
long double  //更高精度

1.4布爾類(lèi)型

在C99中引入的布爾類(lèi)型專(zhuān)門(mén)表示真假

布爾類(lèi)型的使用需要包含頭文件<stdbool.h>

布爾類(lèi)型變量的取值是:truefalse

define bool _Bool

#define false 0

#define true 1

演示:
_Bool flag = true;
if (flag)
  printf("i like C\n");

1.5各種數(shù)據(jù)類(lèi)型的長(zhǎng)度

每?種數(shù)據(jù)類(lèi)型都有自己的長(zhǎng)度,使?不同的數(shù)據(jù)類(lèi)型,能夠創(chuàng)建出長(zhǎng)度不同的變量,變量長(zhǎng)度的不 同,存儲(chǔ)的數(shù)據(jù)范圍就有所差異。

1.5.1 sizeof操作符

sizeof 是?個(gè)關(guān)鍵字,也是操作符,專(zhuān)門(mén)是用來(lái)計(jì)算 sizeof 的操作符數(shù)的類(lèi)型長(zhǎng)度的,單位是字節(jié)。 sizeof 操作符的操作數(shù)可以是類(lèi)型,也可是變量或者表達(dá)式。

sizeof ( 類(lèi)型 )
sizeof 表達(dá)式

sizeof 的操作數(shù)如果不是類(lèi)型,是表達(dá)式的時(shí)候,可以省略掉后邊的括號(hào)的。

sizeof 后邊的表達(dá)式是不真實(shí)參與運(yùn)算的,根據(jù)表達(dá)式的類(lèi)型來(lái)得出大小。

sizeof 的計(jì)算結(jié)果是 size_t 類(lèi)型的。C語(yǔ)言創(chuàng)造了?個(gè)類(lèi)型別名 size_t ,用來(lái)統(tǒng)?表示 sizeof 的返回值類(lèi)型。對(duì)應(yīng)當(dāng)前系統(tǒng)的 sizeof 的返回值類(lèi)型,可能是 unsigned int ,也可能是 unsigned long long 。

#include <stdio.h>

int main()
{
   int a = 10;
   printf("%zd\n", sizeof(a));
   printf("%zd\n", sizeof a );  //a是變量的名字,可以省略掉sizeof后邊的() 
   printf("%zd\n", sizeof(int));
   printf("%zd\n", sizeof(3 + 3.5));
   return 0;
}

1.5.2 數(shù)據(jù)類(lèi)型長(zhǎng)度

#include <stdio.h>

int main()
{
   printf("%zd\n", sizeof(char));        輸出1
   printf("%zd\n", sizeof(_Bool));       輸出1
   printf("%zd\n", sizeof(short));       輸出2
   printf("%zd\n", sizeof(int));         輸出4
   printf("%zd\n", sizeof(long));        輸出4
   printf("%zd\n", sizeof(long long));   輸出8
   printf("%zd\n", sizeof(float));       輸出4
   printf("%zd\n", sizeof(double));      輸出8
   printf("%zd\n", sizeof(long double)); 在VS上輸出8,在gcc上輸出16
   return 0;
}

1.5.3 sizeof中表達(dá)式不計(jì)算

#include <stdio.h>

int main()
{
   short s = 2;
   int b = 10;
   printf("%d\n", sizeof(s = b+1));
   printf("s = %d\n", s);
   return 0;
}

sizeof 在代碼進(jìn)行編譯的時(shí)候,就根據(jù)表達(dá)式的結(jié)果的類(lèi)型,推到并確定了類(lèi)型的長(zhǎng)度,而表達(dá)式 真要被執(zhí)行,卻要在程序運(yùn)行期間才會(huì)發(fā)生,如果在編譯期間已經(jīng)將 sizeof 處理掉了,所以在運(yùn)行期間就不會(huì)執(zhí)行表達(dá)式了。

二、signed和unsigned

C語(yǔ)言使用signed 和 unsigned 關(guān)鍵字修飾字符型和整型類(lèi)型的。

signed 關(guān)鍵字,表示?個(gè)類(lèi)型帶有正負(fù)號(hào),包含負(fù)值; unsigned 關(guān)鍵字,表示該類(lèi)型不帶有正負(fù)號(hào),只能表示零和正整數(shù)。

如:

對(duì)于 int 類(lèi)型,默認(rèn)是帶有正負(fù)號(hào)的,也就是說(shuō)  int  等同于 signed int

由于這是默認(rèn)情況,關(guān)鍵字 signed ?般都省略不寫(xiě),但是寫(xiě)了也不算錯(cuò)。

int 類(lèi)型也可以不帶正負(fù)號(hào),只表示非負(fù)整數(shù)。這時(shí)就必須使用關(guān)鍵字 unsigned 聲明變量。

unsigned int 里面的 int 可以省略,所以 unsigned int a 也可以寫(xiě)成 unsiged a 。

但是 char 不等同于 signed char,它可能是signed char,也可能是unsigned char 。

三、數(shù)據(jù)類(lèi)型的取值范圍

每?種數(shù)據(jù)類(lèi)型有自己的取值范圍,也就是存儲(chǔ)的數(shù)值的最大值和最小值的區(qū)間

某種整數(shù)類(lèi)型的極限值,應(yīng)該盡量使用這些常量。

  • SCHAR_MIN , SCHAR_MAX :signed char 的最小值和最大值。
  • SHRT_MIN , SHRT_MAX :short 的最小值和最大值。
  • INT_MIN , INT_MAX :int 的最小值和最大值。
  • LONG_MIN , LONG_MAX :long 的最小值和最大值。
  • LLONG_MIN , LLONG_MAX :long long 的最小值和最大值。
  • UCHAR_MAX :unsigned char 的最大。
  • USHRT_MAX :unsigned short 的最大值。
  • UINT_MAX :unsigned int 的最大值。
  • ULONG_MAX :unsigned long 的最大值。
  • ULLONG_MAX :unsigned long long 的最大值。

四、變量

4.1 變量的創(chuàng)建

類(lèi)型是干什么的?類(lèi)型是創(chuàng)建變量

那變量是什么呢?變量是經(jīng)常變化的量

不變的量稱(chēng)為常量

變量創(chuàng)建的語(yǔ)法形式如下:

my_student name;

 數(shù)據(jù)類(lèi)型  變量名

變量命名的?般規(guī)則:

  • 只能由字母(包括大寫(xiě)和小寫(xiě))、數(shù)字和下劃線(xiàn)(` _ `)組成。
  • 不能以數(shù)字開(kāi)頭。
  • 長(zhǎng)度不能超過(guò)63個(gè)字符。
  • 變量名中區(qū)分大小寫(xiě)的。
  • 變量名不能使用關(guān)鍵字。
int age;        //整型變量 
char ch;        //字符變量 
double weight;  //浮點(diǎn)型變量 

變量在創(chuàng)建的時(shí)候就給一個(gè)初始值,為初始化

int age = 18;
char ch = 'h';
double weight = 45.0;
unsigned int height = 90;

4.2 變量的分類(lèi)

  • 全局變量:在大括號(hào)外部定義的變量就是全局變量全局變量的使用范圍更廣,整個(gè)代碼中想使用,都是有辦法使用的。
  • 局部變量:在大括號(hào)內(nèi)部定義的變量就是局部變量局部變量的使用范圍是比較局限,只能在自己所在的局部范圍內(nèi)使用的。
#include <stdio.h>

int time = 2026;   //全局變量 
int main()
{
   int last = 2025;  //局部變量 
   printf("%d\n", time);
   printf("%d\n", last);
   return 0;
}

當(dāng)全局變量和局部變量的名字相同時(shí),局部變量?jī)?yōu)先使用

#include <stdio.h>

int n = 1000;
int main()
{
   int n = 10;
   printf("%d\n", n);//打印出10
   return 0;
}

全局變量和局部變量在內(nèi)存中存儲(chǔ)在哪里?

內(nèi)存中有三個(gè)區(qū)域:棧區(qū)、堆區(qū)、靜態(tài)區(qū)。

  • 1. 局部變量是放在內(nèi)存的棧區(qū)
  • 2. 全局變量是放在內(nèi)存的靜態(tài)區(qū)
  • 3. 堆區(qū)是用來(lái)動(dòng)態(tài)內(nèi)存管理的

五、 算術(shù)操作符(運(yùn)算符):+、-、*、/、%

5.1 + 和 -

位于操作符倆端的就是它們的操作數(shù),這種操作符也叫雙目操作符 

#include <stdio.h>

int main()
{
   int x = 4 + 18;
   int y = 32 - 23;
   printf("%d\n", x);
   printf("%d\n", y);
   return 0;
}

5.2 *

#include <stdio.h>

int main()
{
   int num = 5;
   printf("%d\n", num * num); // 輸出 25 
   return 0;
}

5.3 /

除號(hào)的兩端如果是整數(shù),執(zhí)行的是整數(shù)除法,得到的結(jié)果也是整數(shù)。

#include <stdio.h>

int main()
{
   float x = 6 / 4;
   int y = 6 / 4;
   printf("%f\n", x); // 輸出 1.000000 
   printf("%d\n", y); // 輸出 1 
   return 0;
}

倆個(gè)運(yùn)算數(shù)至少有一個(gè)是浮點(diǎn)數(shù)時(shí),進(jìn)行浮點(diǎn)數(shù)除法,得到浮點(diǎn)數(shù)的結(jié)果

#include <stdio.h>

int main()
{
   float x = 6.0 / 4; // 或者寫(xiě)成 6 / 4.0 
   printf("%f\n", x); // 輸出 1.500000 
   return 0;
}

5.4 %

運(yùn)算符 % 表示模(余)運(yùn)算,即返回兩個(gè)整數(shù)相除的余值。這個(gè)運(yùn)算符只用于整數(shù),不能用于浮點(diǎn) 數(shù)。

#include <stdio.h>

int main()
{
   int x = 6 % 4; 
   printf("%d",x);  //輸出2
   return 0;
}

負(fù)數(shù)求模的結(jié)果的正負(fù)號(hào)由第?個(gè)運(yùn)算數(shù)的正負(fù)號(hào)決定。

#include <stdio.h>

int main()
{
   printf("%d\n", 11 % -5); // 1
   printf("%d\n",-11 % -5); // -1
   printf("%d\n",-11 % 5); // -1
   return 0;
}

六、 賦值操作符:=和復(fù)合賦值

在變量創(chuàng)建的時(shí)候給?個(gè)初始值叫初始化,在變量創(chuàng)建好后,再給?個(gè)值,就是賦值。

int a = 100;  //初始化 
a = 200;  //賦值,這? = 就是賦值操作符 

賦值操作符 = 是?個(gè)隨時(shí)可以給變量賦值的操作符。

6.1 連續(xù)賦值

int a = 3;
int b = 4;
int c = 8;
c = b = a+3;  //連續(xù)賦值,從右向左依次賦值的。

C語(yǔ)言雖然支持連續(xù)賦值,但是代碼不易理解,建議拆開(kāi)來(lái)寫(xiě)。

int a = 3;
int b = 4;
int c = 8;
b = a + 3;
c = b;

6.2 復(fù)合賦值符

復(fù)合賦值法即對(duì)?個(gè)數(shù)進(jìn)行自增、自減的操作。

int a = 18;
a = a+3;
a = a-2;

也可以寫(xiě)成:
a += 3;
a -= 2;

C語(yǔ)言中常見(jiàn)的復(fù)合賦值符如下:

+=    -=

*=     /=    %=  

>>=     <<=

&=    |=    ^=

七、 單目操作符:++、--、+、-

7.1 ++和--

++是?種自增的操作符,分為前置++和后置++,--是?種自減的操作符,也分為前置--和后置--

7.1.1 前置++(前置--)

先+1(-1),后使用

int a = 10;
int b = ++a;   //++的操作數(shù)是a,是放在a的前?的,就是前置++ 
               //a+1后變成11,在使用就是賦值給b,所以a b均為11
printf("a=%d b=%d\n",a , b);   輸出   11 11
int a = 10;
int b = --a;    //--的操作數(shù)是a,是放在a的前?的,就是前置-- 
printf("a=%d b=%d\n",a , b);   //輸出的結(jié)果是:9 9 

7.1.2 后置++(后置--)

先使用,后+1(-1)

int a = 10;
int b = a++;   //++的操作數(shù)是a,是放在a的后?的,就是后置++ 
               //先使用a,就是先賦值給b,b得到10,然后再+1,a變成11
printf("a=%d b=%d\n",a , b);  //輸出 11 10
int a = 10;
int b = a--;      //--的操作數(shù)是a,是放在a的后?的,就是后置-- 
printf("a=%d b=%d\n",a , b);  //輸出的結(jié)果是:9 10 

7.2 + 和 -

+ 是正號(hào),- 是負(fù)號(hào),都是單目操作符

運(yùn)算符 + 對(duì)正負(fù)值沒(méi)有影響,是?個(gè)完全可以省略的運(yùn)算符,但是寫(xiě)了也不會(huì)報(bào)錯(cuò)。

運(yùn)算符 - 用來(lái)改變?個(gè)值的正負(fù)號(hào),負(fù)數(shù)的前面加上 - 就會(huì)得到正數(shù),正數(shù)的前面加上 - 會(huì)得到負(fù) 數(shù)。

int a = 10;
int b = -a;
int c = -10;
printf("b=%d c=%d\n", b, c);   //b和c都是-10 

int a = -10;
int b = -a;
printf("b=%d\n", b);   //b是10 

八、強(qiáng)制類(lèi)型轉(zhuǎn)換

int a = 3.14;
//a的是int類(lèi)型, 3.14是double類(lèi)型,兩邊的類(lèi)型不?致,編譯器會(huì)報(bào)警告 

int a = (int)3.14;
//意思是將3.14強(qiáng)制類(lèi)型轉(zhuǎn)換為int類(lèi)型,這種強(qiáng)制類(lèi)型轉(zhuǎn)換只取整數(shù)部分

一般情況下,不使用強(qiáng)制類(lèi)型轉(zhuǎn)化實(shí)現(xiàn)代碼

萬(wàn)不得已情況下,才使用強(qiáng)制類(lèi)型轉(zhuǎn)化

九、printf 和 scanf 介紹

9.1 printf

9.1.1 基本用法

printf() 的作用是將參數(shù)文本輸出到屏幕

printf() 不會(huì)在行尾自動(dòng)添加換行符,運(yùn)行結(jié)束后,光標(biāo)就停留在輸出結(jié)束的地方,不會(huì)自動(dòng)換 行。

在輸出文本的末尾,添加換行符 \n ,使光標(biāo)移到下一行的開(kāi)頭。

#include <stdio.h>

int main() 
{
   printf("Hello World");
   return 0;
}


int main() 
{
   printf("Hello World\n");
   return 0;
}

printf() 是在標(biāo)準(zhǔn)庫(kù)的頭文件 <stdio.h> 定義的。使用printf前,必須包含頭文件 <stdio.h> 。

9.1.2占位符

占位符,就是這個(gè)位置可以用其他值代入。

#include <stdio.h>

int main()
{
   printf("There are %d boxes\n", 3);
   //輸出There are 3 boxes
   return 0;
}

%d 就是占位符,這個(gè)位置可以用其他值代替。

占位符的第二個(gè)字符表示占位的類(lèi)型,%d表示這里代入的必須是一個(gè)整數(shù),如上面中的3。

輸出的文本中可以使用多個(gè)占位符。

printf() 參數(shù)與占位符是一一對(duì)應(yīng)關(guān)系,如果有 n 個(gè)占位符, printf() 的參數(shù)就應(yīng)該有 n + 1 個(gè)。如果參數(shù)個(gè)數(shù)少于對(duì)應(yīng)的占位符, printf() 可能會(huì)輸出內(nèi)存中的任意值。

#include <stdio.h>

int main()
{
   printf("%s says it is %d o'clock\n", "zhangsan", 18);
   //有倆個(gè)占位符,第一個(gè)%s ,第二個(gè)%d                                            
   //分別對(duì)應(yīng) printf() 的第二個(gè)(zhangsan)和三個(gè)參數(shù)(18)
   return 0;
}

9.1.3 占位符列舉

常見(jiàn)的占位符(加粗為常用的占位符):

  • %a :十六進(jìn)制浮點(diǎn)數(shù),字母輸出為小寫(xiě)。
  • %A :十六進(jìn)制浮點(diǎn)數(shù),字母輸出為大寫(xiě)。
  • %c :字符。//char
  • %d :十進(jìn)制整數(shù)(有符號(hào)的10進(jìn)制整數(shù))。// int
  • %e :使用科學(xué)計(jì)數(shù)法的浮點(diǎn)數(shù),指數(shù)部分的 e 為小寫(xiě)。
  • %E :使用科學(xué)計(jì)數(shù)法的浮點(diǎn)數(shù),指數(shù)部分的 E 為大寫(xiě)。
  • %i :整數(shù),基本等同于 %d 。
  • %f :小數(shù)(包含 float 類(lèi)型和 double 類(lèi)型)。//float %f    double - %lf
  • %g :6個(gè)有效數(shù)字的浮點(diǎn)數(shù)。整數(shù)部分?旦超過(guò)6位,就會(huì)自動(dòng)轉(zhuǎn)為科學(xué)計(jì)數(shù)法,指數(shù)部分的 e 為小寫(xiě)。
  • %G :等同于 %g ,唯?的區(qū)別是指數(shù)部分的 E 為大寫(xiě)。
  • %hd :十進(jìn)制 short int 類(lèi)型。
  • %ho :八進(jìn)制 short int 類(lèi)型。
  • %hx :十六進(jìn)制 short int 類(lèi)型。
  • %hu :unsigned short int 類(lèi)型。
  • %ld :十進(jìn)制 long int 類(lèi)型。
  • %lo :八進(jìn)制 long int類(lèi)型。
  • %lx :十六進(jìn)制 long int 類(lèi)型。
  • %lu :unsigned long int 類(lèi)型。
  • %lld :十進(jìn)制 long long int 類(lèi)型。
  • %llo :八進(jìn)制 long long int 類(lèi)型。
  • %llx :十六進(jìn)制 long long int 類(lèi)型。
  • %llu :unsigned long long int 類(lèi)型。
  • %le :科學(xué)計(jì)數(shù)法表示的 long double 類(lèi)型浮點(diǎn)數(shù)。
  • %lf :long double 類(lèi)型浮點(diǎn)數(shù)。
  • %n :已輸出的字符串?dāng)?shù)量。該占位符本身不輸出,只將值存儲(chǔ)在指定變量之中。
  • %o :八進(jìn)制整數(shù)。
  • %p :指針(用來(lái)打印地址)。
  • %s :字符串。
  • %u :無(wú)符號(hào)整數(shù)(unsigned int)。
  • %x :十六進(jìn)制整數(shù)。
  • %zd : size_t 類(lèi)型。
  • %% :輸出?個(gè)百分號(hào)。

9.1.4 輸出格式

9.1.4.1限定寬度

printf() 允許限定占位符的最小寬度。

%5d 表示這個(gè)占位符的寬度至少為5位。如果不滿(mǎn)5位,對(duì)應(yīng)的值的前面會(huì)添加空格。輸出的值默認(rèn)右對(duì)齊;想輸出左對(duì)齊時(shí),在%后面加 - ,即 %-5d 

#include <stdio.h>

int main()
{
    printf("%5d\n", 123);    // 輸出為 "  123" 
    printf("%-5d\n", 123);   // 輸出為 "123  "
    return 0;
}

對(duì)于小數(shù),會(huì)限制所有數(shù)字的最小顯示寬度。

#include <stdio.h>

int main()
{
   printf("%12f\n", 123.45);  //輸出"  123.450000"
   return 0;
}

%12f 表示輸出的浮點(diǎn)數(shù)最少要占據(jù)12位。由于小數(shù)的默認(rèn)顯示精度為小數(shù)點(diǎn)后6位, 所以 123.45 輸出結(jié)果的頭部會(huì)添加2個(gè)空格。

9.1.4.2 限定小數(shù)位數(shù)

當(dāng)限定小數(shù)位數(shù)為2時(shí),占位符可寫(xiě)為%.2f

#include <stdio.h>

int main()
{
   printf("%.2f\n", 0.5);  //輸出"0.50"
   return 0;
}

與限定寬度結(jié)合使用時(shí)

#include <stdio.h>

int main()
{
   printf("%5.2f\n", 0.5);    //輸出" 0.50"
   return 0;
}

最小寬度和小數(shù)位數(shù)都可以用 * 表示

#include <stdio.h>

int main()
{
   printf("%*.*f\n", 5, 2, 0.5);
   // 同于printf("%5.2f\n", 0.5);
   return 0;
}

9.1.4.3 輸出部分字符串

%s 占位符用來(lái)輸出字符串,默認(rèn)是全部輸出。如果只想輸出開(kāi)頭的部分,可以用 %.ns 指定輸出 的長(zhǎng)度,其中 n 代表?個(gè)數(shù)字,表示所要輸出的長(zhǎng)度。

#include <stdio.h>

int main()
{
   printf("%.5s\n", "hello world");     //,只輸出前五個(gè),"hello"
   return 0;
}

9.2 scanf

當(dāng)我們需要在屏幕上輸入時(shí),就可以用 scanf 函數(shù)

#include <stdio.h>

int main()
{
   int amount = 0;
   printf("請(qǐng)輸?金額:");
   scanf("%d", &amount);
   printf("金額是:%d\n", amount);
   return 0;
}

運(yùn)行之后是:
請(qǐng)輸入金額:5
金額是:5

9.2.1 基本用法

scanf() 函數(shù)用于讀取用戶(hù)的鍵盤(pán)輸入。

程序運(yùn)行到這個(gè)語(yǔ)句時(shí),會(huì)停下來(lái),等待用戶(hù)從鍵盤(pán)輸入。

用戶(hù)輸入數(shù)據(jù)、按下回車(chē)鍵后, scanf() 就會(huì)處理用戶(hù)的輸入,將其存入變量。

它定義在頭文件 <stdio.h> 中 。

scanf() 的語(yǔ)法跟 printf() 類(lèi)似。

int i = 0;
scanf("%d", &i);

%d 占位符與 printf 基本類(lèi)似,告訴編譯器輸入的類(lèi)型

&i 表示用戶(hù)從鍵盤(pán)輸入的整數(shù)存入變量 i 。

變量 i 前必須加上 &指針變量除外),scanf傳遞的是地址,不是值,scanf將變量 i 的地址指向用戶(hù)輸入的值。

變量是指針變量時(shí),不需要&。

scanf("%d%d%f%f", &x, &y, &a, &b);
//前兩個(gè)用戶(hù)輸入的是整數(shù),后兩個(gè)是浮點(diǎn)數(shù)(小數(shù)),依次放入x,y,a,b。

scanf() 處理數(shù)值占位符時(shí),會(huì)自動(dòng)過(guò)濾空白字符,包括空格、制表符、換行符

所以用戶(hù)輸入的數(shù)據(jù)之間有空格、使用回車(chē)鍵不影響 scanf 解讀輸入數(shù)據(jù)

但是使用回車(chē)鍵時(shí),每次按下回車(chē)鍵以后, scanf() 就會(huì)開(kāi)始解讀,如果第?行匹配第?個(gè)占位符,那么下次按下回車(chē)鍵時(shí),就會(huì)從第?個(gè)占位符開(kāi)始解讀。

scanf() 處理用戶(hù)輸入的原理是,用戶(hù)的輸入先放入緩存,等到按下回車(chē)鍵后,按照占位符對(duì)緩存 進(jìn)行解讀。

解讀用戶(hù)輸入時(shí),會(huì)從上?次解讀遺留的第?個(gè)字符開(kāi)始,直到讀完緩存,或者遇到第?個(gè)不符合條件的字符為止。

#include <stdio.h>

int main()
{
   int x;
   float y;
 
   // 輸入 "  123.45# 0" 
   scanf("%d%f", &x, &y);
   return 0;
}

scanf() 讀取用戶(hù)輸入時(shí), %d 占位符會(huì)忽略空格,從 1 處開(kāi)始獲取數(shù)據(jù),讀到 3 停下來(lái),因?yàn)楹?的 . 不屬于整數(shù)的有效字符。就是 %d 會(huì)讀到123。

第二次調(diào)用時(shí),scanf() 就會(huì)從上?次停止解讀的地方,繼續(xù)往下讀取。這?次讀取的收字符是 . ,由于對(duì)應(yīng)的占位符是 %f ,會(huì)讀取到 .45。后面的 # 不屬于浮點(diǎn)數(shù)的有效字符,所以會(huì)停在這?。

9.2.2 scanf 的返回值

scanf() 的返回值是?個(gè)整數(shù),表示成功讀取的變量個(gè)數(shù)。

如果沒(méi)有讀取任何項(xiàng),或者匹配失敗,則返回 0 。

如果在成功讀取任何數(shù)據(jù)之前,發(fā)生了讀取錯(cuò)誤或者遇到讀取到文件結(jié)尾,則返回常量 EOF(-1)。

#include <stdio.h>

int main()
{
   int a = 0;
   int b = 0;
   float f = 0.0f;
   int x = scanf("%d %d %f", &a, &b, &f); //輸入 1 2 3.45    x輸出3
   printf("a=%d b=%d f=%f\n", a, b, f)    //輸入 1 2 3       x輸出3,f的值是3.0000
   printf("x = %d\n", x);                 //輸入 1 ,2 3.45  x輸出1,只成功讀取a
   return 0;                              //輸入 1.1 2 3.14  x輸出0,解析第一個(gè)失敗
}                                         

9.2.3 占位符

scanf() 常用的占位符,與 printf() 的占位符基本?致,使用時(shí)也基本一致。

在使用占位符時(shí),除 %c 以外,會(huì)自動(dòng)忽略空白字符,如果要強(qiáng)制忽略,在使用%c時(shí),在%c前面加空格,scanf("  %c", &ch)。

%s ,它不能簡(jiǎn)單地等同于字符串。它從第?個(gè)非空白字符開(kāi)始讀起,直到遇到空白字符(即空格、換行符、制表符等)為止。%s 不會(huì)包含空白字符,所以無(wú)法用來(lái)讀取多個(gè)單詞。scanf() 遇到 %s 占位符時(shí),會(huì)在字符串變量末尾存儲(chǔ)?個(gè)空字符 \0 。

9.2.4 賦值忽略符

加在任何占位符的百分號(hào)后面,該占位符就不會(huì)返回值,解析后將被丟棄。

scanf("%d%*c%d%*c%d", &year, &month, &day);
//輸入 2026-1-16 時(shí)-會(huì)被丟棄

%*c 就是在占位符的百分號(hào)后面,加入了賦值忽略符 * ,表示這個(gè)占位符沒(méi)有對(duì)應(yīng)的變量,解讀后不必返回。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Qt優(yōu)雅實(shí)現(xiàn)線(xiàn)程安全單例模式(模板化和自動(dòng)清理)

    Qt優(yōu)雅實(shí)現(xiàn)線(xiàn)程安全單例模式(模板化和自動(dòng)清理)

    在 Qt 開(kāi)發(fā)中,單例模式是高頻使用的設(shè)計(jì)模式,本文將基于模板封裝 + 管理器的設(shè)計(jì)思路,實(shí)現(xiàn)一套可直接復(fù)用的單例框架,并詳細(xì)講解其設(shè)計(jì)原理與最佳實(shí)踐,有需要的可以了解下
    2025-11-11
  • C/C++中的?Qt?StandardItemModel?數(shù)據(jù)模型應(yīng)用解析

    C/C++中的?Qt?StandardItemModel?數(shù)據(jù)模型應(yīng)用解析

    QStandardItemModel?是標(biāo)準(zhǔn)的以項(xiàng)數(shù)據(jù)為單位的基于M/V模型的一種標(biāo)準(zhǔn)數(shù)據(jù)管理方式,本文給大家介紹C/C++中的?Qt?StandardItemModel?數(shù)據(jù)模型應(yīng)用解析,感興趣的朋友跟隨小編一起看看吧
    2021-12-12
  • C語(yǔ)言實(shí)現(xiàn)軍旗游戲的示例代碼

    C語(yǔ)言實(shí)現(xiàn)軍旗游戲的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用C語(yǔ)言實(shí)現(xiàn)軍旗游戲,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-11-11
  • C++中函數(shù)使用的基本知識(shí)學(xué)習(xí)教程

    C++中函數(shù)使用的基本知識(shí)學(xué)習(xí)教程

    這篇文章主要介紹了C++中函數(shù)使用的基本知識(shí)學(xué)習(xí)教程,涵蓋了函數(shù)的聲明和參數(shù)以及指針等各個(gè)方面的知識(shí),非常全面,需要的朋友可以參考下
    2016-01-01
  • C++調(diào)用C函數(shù)報(bào)錯(cuò)無(wú)法解析的外部命令/無(wú)法解析的外部符號(hào)問(wèn)題

    C++調(diào)用C函數(shù)報(bào)錯(cuò)無(wú)法解析的外部命令/無(wú)法解析的外部符號(hào)問(wèn)題

    這篇文章主要介紹了C++調(diào)用C函數(shù)報(bào)錯(cuò)無(wú)法解析的外部命令/無(wú)法解析的外部符號(hào)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C語(yǔ)言二叉排序(搜索)樹(shù)實(shí)例

    C語(yǔ)言二叉排序(搜索)樹(shù)實(shí)例

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言二叉排序樹(shù)實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • C++11新特性之隨機(jī)數(shù)庫(kù)(Random?Number?Library)詳解

    C++11新特性之隨機(jī)數(shù)庫(kù)(Random?Number?Library)詳解

    相對(duì)于C++11之前的隨機(jī)數(shù)生成器來(lái)說(shuō),C++11的隨機(jī)數(shù)生成器是復(fù)雜了很多,下面這篇文章主要給大家介紹了關(guān)于C++11新特性之隨機(jī)數(shù)庫(kù)(Random?Number?Library)的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • C++淺析數(shù)據(jù)在內(nèi)存中如何存儲(chǔ)

    C++淺析數(shù)據(jù)在內(nèi)存中如何存儲(chǔ)

    使用編程語(yǔ)言進(jìn)行編程時(shí),需要用到各種變量來(lái)存儲(chǔ)各種信息。變量保留的是它所存儲(chǔ)的值的內(nèi)存位置。這意味著,當(dāng)您創(chuàng)建一個(gè)變量時(shí),就會(huì)在內(nèi)存中保留一些空間。您可能需要存儲(chǔ)各種數(shù)據(jù)類(lèi)型的信息,操作系統(tǒng)會(huì)根據(jù)變量的數(shù)據(jù)類(lèi)型,來(lái)分配內(nèi)存和決定在保留內(nèi)存中存儲(chǔ)什么
    2022-08-08
  • 基于Matlab制作偽3D第一視角迷宮小游戲

    基于Matlab制作偽3D第一視角迷宮小游戲

    這篇文章主要為大家詳細(xì)介紹了如何利用Matlab語(yǔ)言制作偽3D第一視角迷宮小游戲,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以動(dòng)手嘗試一下
    2022-07-07
  • OpenCV圖像輪廓提取的實(shí)現(xiàn)

    OpenCV圖像輪廓提取的實(shí)現(xiàn)

    本文主要介紹了OpenCV圖像輪廓提取的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08

最新評(píng)論

奎屯市| 蓬安县| 桂阳县| 马山县| 安龙县| 赤峰市| 来凤县| 辉县市| 通河县| 祁连县| 阿勒泰市| 永登县| 贺州市| 巴林右旗| 延川县| 泰安市| 广河县| 沁阳市| 浠水县| 华宁县| 石景山区| 香港| 宜章县| 民勤县| 福州市| 友谊县| 依兰县| 广河县| 普格县| 台江县| 东平县| 灵寿县| 镇安县| 修水县| 霸州市| 新源县| 鱼台县| 家居| 册亨县| 哈尔滨市| 阳新县|