亚洲精品一二区_国产黄色片网站_99久久久成人国产精品_蜜臀网_国产精品一区二区三区免费_成人av中文字幕_91精品国产欧美一区二区成人

當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > C語(yǔ)言scanf函數(shù)用法

C語(yǔ)言scanf函數(shù)用法 時(shí)間:2019-05-23      來(lái)源:華清遠(yuǎn)見(jiàn)

代碼是寫不完的,函數(shù)也不可能全部掌握,畢竟一個(gè)項(xiàng)目也不可能把所有的函數(shù)用一遍,但是工作當(dāng)中的項(xiàng)目都有一個(gè)共同點(diǎn),就是像上面這樣,至少會(huì)有一個(gè)輸入,也至少會(huì)有一個(gè)輸出,中間的黑盒子是用戶不需要關(guān)系的,那么作為工程師我們做的就是實(shí)現(xiàn)這個(gè)黑盒子,但是要實(shí)現(xiàn)這個(gè)黑盒子,那么我們必須明確我們的輸入是什么,換言之就是明確用戶的需求,哈哈,說(shuō)了這么一大堆,其實(shí)就是引入一個(gè)可以用來(lái)提供用戶輸入的函數(shù)接口scanf而已。

概述

當(dāng)我們剛開(kāi)始C學(xué)習(xí)編程的時(shí)候,可能第一個(gè)代碼是printf,但是下一個(gè)代碼可能就會(huì)用到scanf了,因?yàn)樵谖覀冞不明白fgets,fread,read……等一系列其他的函數(shù)接口的時(shí)候,scanf就比較有用了,可以滿足我們大多數(shù)的輸入操作請(qǐng)求。

在Ubuntu下man scanf,你會(huì)看到如下內(nèi)容

 scanf, fscanf, sscanf, vscanf, vsscanf, vfscanf - input format conversion

 SYNOPSIS

        #include <stdio.h>

        int scanf(const char *format, ...);

我們首先從基本的用法入手來(lái)看scanf函數(shù):那么什么是基本用法呢?

就是認(rèn)識(shí)函數(shù)接口的三要素: 功能,參數(shù),返回值。

功能:格式化輸入,====>依據(jù)你的輸入存放到指定的變量當(dāng)中

參數(shù):注意類型是 char *format, 再除以參數(shù) …  是可變參數(shù)

 這個(gè)解釋有兩點(diǎn)需要注意:

1、char *format指針,對(duì)應(yīng)一個(gè)的字符串,底層實(shí)現(xiàn)是字符串解析

            2、參數(shù)是可變的,至少一個(gè),那么也闊以同時(shí)輸入多個(gè),且必須是地址

            3、在終端上的輸入格式需要和char *format的格式一樣

返回值:

成功:正確按指定格式輸入變量的個(gè)數(shù);,小于等于最大的輸入項(xiàng)個(gè)數(shù)

   失敗:返回0

 

一般用法:

scanf()函數(shù)的一般格式為:scanf("格式字符串",輸入項(xiàng)首地址表)

scanf的格式控制的一般形式為:%[寬度]類型字符

"類型字符":

 d -- 輸入十進(jìn)制整數(shù) 、o -- 輸入八進(jìn)制整數(shù) 、x -- 輸入十六進(jìn)制整數(shù) 、u -- 輸入無(wú)符號(hào)十進(jìn)制整數(shù) f或e -- 輸入實(shí)型數(shù)(用小數(shù)形式或指數(shù)形式) 、c -- 輸入單個(gè)字符 、s -- 輸入字符串 

scanf("輸入控制符", 輸入?yún)?shù));

功能:將從鍵盤輸入的字符轉(zhuǎn)化為“輸入控制符”所規(guī)定格式的數(shù)據(jù),然后存入以輸入?yún)?shù)的值為地址的變量中。

測(cè)試代碼1: 數(shù)值型和字符型數(shù)據(jù)的輸入

 

#include<stdio.h>

 

int main(int argc, const char *argv[])

{

    int x;

char ch;

 

    printf("please input a number:");

    scanf("%d",&x);   //&x 表示變量x 的地址,&是取地址符

printf("x = %d.\n",x);

 

printf("please input a char:");

    scanf("%c",&ch);   

printf("ch = %c.\n",ch);

 

    return 0;

}

~      

測(cè)試記錄:

linux@ubuntu:~$ gcc  test.c 

linux@ubuntu:~$ ./a.out 

please input a number:99

x = 99.

please input a char: a

ch = a.

 

測(cè)試代碼2:字符串類型數(shù)據(jù)的輸入

 

#include<stdio.h>

 

int main(int argc, const char *argv[])

{

    int x;

    char str[16] = {0}; //數(shù)組的大小合理分配 2^n次方分配比較好

 

    printf("please input 1 number:");

    scanf("%d",&x);    //數(shù)值型的數(shù)據(jù)需要取地址                                                                              

 

    printf("please input string :");

    scanf("%s",str);   //注意,這里不需要取地址,str本身就是地址

 

    printf("x = %d.\n",x);

    printf("str :%s.\n",str);

 

    return 0;

}

測(cè)試記錄:

linux@ubuntu:~$ gcc test.c

linux@ubuntu:~$ ./a.out 

please input 1 number:10

please input string :helloworld

x = 10.

str :helloworld.

 

測(cè)試代碼3:數(shù)字和字符的格式化輸入---注意字符串的長(zhǎng)度被截取了

 #include<stdio.h>

 

int main(int argc, const char *argv[])

{

     int x;

     char str1[16] = {0};

     printf("please input (eg:10 haha):");

     scanf("%8d %8s",&x,str1);

 

     printf("x=%d str1:%s\n",x,str1);

     return 0;

}                                                                                                                                          

~       

測(cè)試記錄:

linux@ubuntu:~$ gcc test.c

linux@ubuntu:~$ ./a.out 

please input (eg:10 haha):5 helloworld

x=5 str1:hellowor

 

"寬度"

表示輸入讀入字符和整型的長(zhǎng)度表示截取相應(yīng)寬度的數(shù)字賦給后面列表中的相應(yīng)變量;其余的自動(dòng)舍棄。

對(duì)于字符串,則可以用來(lái)截取對(duì)于長(zhǎng)度的數(shù)據(jù)存放到對(duì)應(yīng)的buf當(dāng)中,其他舍去。

scanf("%2d%3d",&a, &b);如果輸入為12345則將12賦給a,將45賦給b;scanf("%2c%3c",&a, &b);如果輸入為12345則將'1'賦給a,將'3'賦給b 

scanf("%8s",str1);如果輸入為”helloworld”,則將“hellowor”賦值給str1,其他舍棄

測(cè)試記錄4:數(shù)值型數(shù)據(jù)和字符串?dāng)?shù)據(jù)的混合輸入

#include<stdio.h>

 

int main(int argc, const char *argv[])

{

    int retval;

    int x;

    float y;

    char str1[16] = {0},str2[16] = {0};

 

    printf("please input (eg:10 haha 20.1 gaga):");

    retval = scanf("%d %s %f %s",&x,str1,&y,str2);

    printf("retval :%d.\n",retval);                                                                                                            

 

    printf("x = %d.y = %f.\n",x,y);

    printf("str1 :%s\nstr2 :%s.\n",str1,str2);

 

    return 0;

}

測(cè)試結(jié)果; 在輸入的時(shí)候一定不要忘記你格式化的那個(gè)空格,否則會(huì)報(bào)錯(cuò)

正常輸入:

linux@ubuntu:~$ ./a.out 

please input (eg:10 haha 20.1 gaga):30 GREE 99 hqyj

retval :4.

x = 30.y = 99.000000.

str1 :GREE

str2 :hqyj.

 

測(cè)試記錄5:典型錯(cuò)誤測(cè)試實(shí)錄

 

#include<stdio.h>

 

int main(int argc, const char *argv[])

{

    int retval;

    int x;

    float y;

    char str1[16] = {0},str2[16] = {0};

 

    printf("please input (eg:x = 10 str1 = haha y = 20.1 str2 = gaga):");

    retval = scanf("x = %d str1 = %s y = %f str2 = %s",&x,str1,&y,str2);

    printf("retval :%d.\n",retval);

 

    printf("x = %d.y = %f.\n",x,y);

    printf("str1 :%s\nstr2 :%s.\n",str1,str2);

 

    return 0;                                                                                                                                  

}

錯(cuò)誤輸入:

linux@ubuntu:~$ gcc test.c

linux@ubuntu:~$ ./a.out 

please input (eg:x = 10 str1 = haha y = 20.1 str2 = gaga):88 haha 99 gaga

retval :0.

x = 0.y = 0.000000.

str1 :

str2 :.

在使用的時(shí)候一定要注意輸入格式的提示,或者自己在軟件層面做容錯(cuò)的處理,否則很容易導(dǎo)致不良的用戶體驗(yàn),你要明白,用戶是怎么操作的? 答:隨便操作,隨意很多問(wèn)題要在設(shè)計(jì)的時(shí)候就考慮到。

以上是 scanf 的最簡(jiǎn)單用法,也是最常用、最基本、最重要的用法。

上一篇:typedef和#define的用法與區(qū)別

下一篇:const的作用

熱點(diǎn)文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗(yàn)分享
熱點(diǎn)新聞推薦
前臺(tái)專線:010-82525158 企業(yè)培訓(xùn)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見(jiàn)科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號(hào)-5京公海網(wǎng)安備11010802025203號(hào)

回到頂部

主站蜘蛛池模板: 欧美成人猛男性色生活 | 国产一区二区在线视频观看 | 毛片毛片毛片毛片出来毛片 | 另类亚洲视频 | 免费10大看盘软件 | 中文字幕一精品亚洲无线一区 | 日韩在线视频www色 日韩在线视频播放 | 国产成人欧美一区二区三区vr | 日韩a无v码在线播放免费 | 亚洲精品国产成人99久久 | 在线播放日本爽快片 | 色色视频免费网 | 狠狠色噜噜综合社区 | 99re6在线精品视频免费播放 | 国产福利区一区二在线观看 | 狠狠久久综合 | 精品一区二区三区五区六区七区 | 日本高清视频色www在线观看 | 欧美色吧视频在线观看 | 欧美理论在线观看 | 国产极品白嫩美女在线观看看 | 久久中文字幕在线 | 日本三级香港三级 | 免费又黄又硬又大爽日本 | 九九精品99| 国产高清第一页 | 亚洲欧美一区二区久久香蕉 | 另类侏儒freesex | 免费看真人a一级毛片 | 欧日韩一区二区三区 | 卡一卡2卡三精品 | 国产综合成色在线视频 | 中文字幕一区在线观看视频 | 欧美在线黄 | 免费一级特黄特色黄大任片 | 天天操天天摸天天曰天天干天天弄天天干 | 免费看一级做a爰片久久 | 成人秋霞在线观看视频 | 欧美日批视频 | 人人成人免费公开视频 | 看全色黄大色黄大片免责看的 |