b2c商城網(wǎng)站營銷方案百度做網(wǎng)站
? ? ? 本文繼續(xù)學(xué)習(xí)I/O函數(shù),并延續(xù)前文的編號(hào)。
(三)、sscanf() 函數(shù)
? ? ? ?sscanf() 函數(shù)與scanf() 有些相似,不同之處sscanf() 是從已有的字符串里面獲取數(shù)據(jù);這個(gè)函數(shù)也是定義在stdio.h中。
? ? ? ?功能:處理已經(jīng)輸入到計(jì)算機(jī)中的字符串,從其中提取有用的數(shù)據(jù)
? ? ? ?格式:sscanf(參1,參2,參3) ?
? ? ? ? ? ? ?參1 字符串指針變量或字符串常量?
? ? ? ? ? ? ?參2 占位符字符串(指出從參1中解析出什么數(shù)據(jù))
? ? ? ? ? ? ?參3 接收變量地址
? ? ? ?返回值:解析字符串成功,返回值是成功賦值的變量個(gè)數(shù),如果解析失敗,沒解析出內(nèi)容返回0,如果解析的是"\n"或"\0"或空格等則返回-1。
? ? ? ?說明:
? ? ? ?a.函數(shù)sscanf 在解析字符串時(shí),需要占位字符串中的占位符類型、個(gè)數(shù)與接收變量的一致;占位符字符串中的間隔符號(hào)與源字符串中的間隔符號(hào)也要匹配。
? ? ? ?b.函數(shù)sscanf 的數(shù)據(jù)來源是儲(chǔ)存在變量中的,所以可以反復(fù)使用,一次不能解析出來可以二次解析,甚至多次完成;這點(diǎn)不同于scanf 是流數(shù)據(jù),過去就完了。
? ? ? ?c.函數(shù)sscanf 在使用時(shí)和scanf 一樣,系統(tǒng)也會(huì)報(bào)警該函數(shù)不夠安全導(dǎo)致不能編譯,如想取消報(bào)警,可在程序頭部添加語句:#define _CRT_SECURE_NO_WARNINGS。
(四)、getchar() 函數(shù)
? ? ? ?這個(gè)函數(shù)我們一直在用,以往使用它的目的是為了阻塞程序的運(yùn)行,使我們能夠看到程序運(yùn)行的結(jié)果(打回車結(jié)束程序)。實(shí)際上這個(gè)函數(shù)是用于鍵盤輸入的函數(shù),每調(diào)用一次getchar,函數(shù)就從鍵盤讀入一個(gè)字符。getchar函數(shù)定義在頭文件 stdio.h中。
? ? ? ?功能:獲得鍵盤輸入的一個(gè)字符
? ? ? ?使用格式:getchar(); //無參
? ? ? ?返回值:正常接收輸入的字符應(yīng)當(dāng)是用char類型變量接收;但讀取失敗時(shí),返回的值是-1,因此處理異常時(shí)接收返回值應(yīng)使用int型;也就是先用int型過濾一下,看是不是-1,如不是則可用char類型接收。
? ? ? ?說明:
? ? ? ?a.函數(shù)getchar從鍵盤讀取字符時(shí)如直接按回車鍵相當(dāng)于輸入非顯示字符"\n"。
? ? ? ?b.如果輸入空格,空格也會(huì)作為字符被讀入,這一點(diǎn)不同于scanf,需注意。
? ? ? ?c.函數(shù)getchar讀入的都是字符,如果想轉(zhuǎn)變?yōu)槠渌愋?#xff0c;則需要sscanf函數(shù)解析;而scanf可以直接輸入其它類型數(shù)據(jù)。
? ? ? ?d.由于每個(gè)中文字符需要一個(gè)以上字節(jié)表示,所以僅執(zhí)行一次getchar函數(shù)無法輸入中文,如輸入中文需要進(jìn)行循環(huán)。
(五)、putchar 函數(shù)
? ? ? ?函數(shù)putchar可以將單個(gè)字符輸出到屏幕,效果與使用printf 輸出一個(gè)字符相同;這個(gè)函數(shù)也定義在頭文件stdio.h中。
? ? ? ?功能:將作為函數(shù)參數(shù)的單個(gè)字符輸出到屏幕
? ? ? ?格式:putchar('a');
? ? ? ?返回值:成功返回參數(shù)字符,不成功返回-1
? ? ? ?說明:
? ? ? ? a.函數(shù)getchar與putchar均是對(duì)單個(gè)字符的操作,相比較scanf與printf速度來的快。
?(六)、puts函數(shù)
? ? ? ?函數(shù)puts可以把字符串顯示在屏幕上,并且自動(dòng)在字符串末尾添加換行符;puts函數(shù)定義在頭文件 stdio.h中 。
? ? ? ?功能:將作為參數(shù)的字符串顯示到屏幕上
? ? ? ?格式:puts(參1);? //參1 字符串指針變量或字符串常量
? ? ? ?返回值:成功返回非負(fù)整數(shù),失敗返回-1
?(七)、下面將本文涉及的幾個(gè)函數(shù)放到一個(gè)小程序中,用例子加深理解。
#define _CRT_SECURE_NO_WARNINGS //禁止對(duì)sscanf函數(shù)報(bào)警
#include<stdio.h>
int main(void)
{
//使用sscanf函數(shù)解析年月日字符串char str[] = "2024年8月12日"; //中文習(xí)慣的日期字符串int x, y, z;int ret=sscanf(str, "%d年%d月%d日", &x, &y, &z); printf("年=%d\n", x); //運(yùn)行結(jié)果:年=2024printf("月=%d\n", y); //運(yùn)行結(jié)果:月=8printf("日=%d\n", z); //運(yùn)行結(jié)果:日=12printf("ret=%d\n", ret); //運(yùn)行結(jié)果:ret=3 (說明成功給三個(gè)變量解析到值)
//使用getchar函數(shù)輸入數(shù)據(jù)int i = 0;int getChar;char str1[128] = {0};printf("請(qǐng)輸入:\n");while ((getChar = getchar()) != '\n') //輸入12345回車結(jié)束{if (getChar == -1) break;str1[i] = (char)getChar;i++;}printf("str1=%s\n",str1);//運(yùn)行結(jié)果:str1=12345
//使用putchar顯示字符char str2[] = "abcdefghijklmn";i = 0;while (str2[i] != '\0'){putchar(str2[i]); //運(yùn)行結(jié)果:abcdefghijklmni++;}
//使用puts顯示字符串puts(str2); //可以看到puts的顯示是緊跟在putchar顯示內(nèi)容的后邊,說明putchar不提供自動(dòng)換行puts(str2); //puts第二次顯示是另起一行的,說明puts顯示字符串是自動(dòng)加換行符的getchar(); return 0;
}