亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

C語言數據輸入與輸出實例詳解

2020-01-26 14:04:04
字體:
來源:轉載
供稿:網友

C語言數據輸入與輸出實例詳解

1 概論

C語言提供了跨平臺的數據輸入輸出函數scanf()和printf()函數,它們可以按照指定的格式來解析常見的數據類型,例如整數,浮點數,字符和字符串等等。數據輸入的來源可以是文件,控制臺以及網絡,而輸出的終端可以是控制臺,文件甚至是網頁。

2 數據輸出

從第一個c語言程序中,就使用了跨平臺的庫函數printf實現將一段文字輸出到控制臺,而實際上,printf()不僅可以將數據按照指定的格式輸出到控制臺,還可以是網頁或者是指定的文件中,printf()函數執行的返回結果是輸出字符的個數。

2.1 輸出數據到網頁

使用printf函數將數據按照指定的格式輸出到網頁的使用案例,目前我們公司內部的IT系統還有用C語言寫的網頁程序(cgi)。

#include <stdio.h>/*使用printf輸出數據到網頁@author Tony 18601767221@163.com@since 20160530 09:04*/void printf_html() {//將生成的exe程序改成cgi就可以部署在Web服務器例如Apache中的cgi-bin目錄中運行了就可以訪問了。//然后通過主機名+端口+文件名.cgi的方式訪問  printf("Content-type:text/html /n/n");//聲明輸出的數據格式是HTML語言  printf("Hello World In HTML");}

2.2 整數格式化輸出

printf()函數的強大之處在于格式化顯示輸出整數,浮點數,字符以及字符串到文件,網頁。同時在控制臺我們可以使用這個函數來調試程序或者獲取方法的返回值等等。

printf函數的表現形式為:printf(“格式化字符串數據”,可變參數列表)

printf只會按照傳遞的參數類型解析數據,不會進行數據類型轉換,傳入的參數類型和個數和輸出的類型和個數保持一致,不然程序運行時會出異常

使用printf打印字符串,整數和字符的案例

#include <stdio.h>/*  使用printf格式化輸出數據  @author Tony 18601767221@163.com  @since 20160530 09:14*/void printf_sample() {//最終都是以字符串的方式打印輸出  printf("Hello World /n");//輸出字符串常量,默認是輸出到控制臺  //printf顯示不同數據類型的數據  printf("我的名字叫%s,我的年齡是%d我的幸運字符是%c/n","Tony",28,'C');}

printf在打印輸出整數時,不僅可以按照三種不同的進制類型(八進制,十進制和十六進制),同時還可以按照有符號和無符號兩種方式打印整數。

以及控制輸出字符的寬度等等:

#include <stdio.h>/*  輸出指定格式的整數數據  如果要在網頁下顯示數據,還需要使用printf實現匹配不同的數據格式  @author Tony 18601767221@163.com  @since 20160530 09:20 */void printf_format_int() {  const int num = 10;  printf("%d",num);//默認的格式是有多寬 填充多寬  printf("%d/t%ld",num,num);//32位以上的系統%d和%ld是等效的 inth和long是等效的  printf("%10d/n",num);//寬度為10,數據顯示默認是右邊對齊  printf("%010d/n",num);//寬度為10,如果不足則用0來補充  printf("%-10d/n",num);//寬度為10,默認是按照右邊對齊, "-"表示左邊對齊  printf("%3d/n",12345); //12345大于實際寬度,3d的格式無效,不足使用空格填充/*  輸出指定格式的整數(有無符號類型以及三種進制類型的)數據  如果要在網頁下顯示數據,還需要匹配不同的格式  @author Tony 18601767221@163.com  @since 20160530 10:11*/void printf_format_int_data_type() {  const int num = 10;  printf("%d/n", num);//有符號十進制  printf("%i/n",num);  printf("%u/n",num); //無符號十進制  printf("%o/n",num);//無符號八進制  printf("%x/n",num); //無符號十六進制}/*  @author Tony 18601767221@163.com  @since 20160530 21:53*/void printf_format_int_unsinged() {  unsigned short int uvalue = 65535;  short int num = 123;  printf("uvalue =%hu/tnum=%hd",uvalue,num);}

2.3 浮點數格式化輸出

printf在打印輸出浮點數時,整數全部輸出,默認保持小數點后六位,可以按照小數和科學計數法(天文數字使用科學計數法存儲節約內存)計數法兩種方式,同時可以控制輸出的小數位數和寬度:

#include <stdio.h>/*  輸出指定格式的浮點數數據  @author Tony 18601767221@163.com  @since 20160530 10:06*/void printf_format_double() {  const double num = 3.14159265359;  printf("num=%.2f/n", num);//小數點后保留兩位  printf("num=%030.10f/n",num);//寬度為30,不足用0補齊,否則按實際寬度輸出  //科學計數法表示  double depth = 1234567000000.0;  printf("depth=%e/n",depth);//指數表示  double value = 1.23456789;// %g 自動選擇寬度少的顯示數據 %f.%e  printf("value=%f/tvalue=%e/tvalue=%g",value,value,value);}

2.4 格式化輸出字符和字符串

printf在輸出字符時通過%c格式符來輸出,同時提供了putchar()函數來輸出一個字符:

#include <stdio.h>/*  格式化輸出字符  @author Tony 186017672212163.com  @since 20160530 10:15*/void printf_char() {  char ch = 'A';  printf("ch=%c/n",ch);  putchar(ch);}

printf在輸出字符串時,可以通過sprintf函數實現將字符串按照指定的格式拼接:

#include <stdio.h>/*  輸出指定格式的字符串數據  @author Tony 18601767221@163.com  @since 20160530 10:08*/void printf_format_string() {  char str[100] = "calc"; //輸出字符串  printf("%s/n",str);}/*  使用sprintf函數實現字符串拼接  @author Tony 18601767221@163.com  @since 20160530 10:32*/void sprintf_string_append() {  char command[100] = { 0 };  sprintf(command, "color %c%c", '4', 'f');//將整數 實數和字符串整合到一個字符串  printf("整合的結果為%s/n", command);  system(command);  system("pause");  char com[10] = "task";  char mand[10] = "listerror";  //command = com + mand; C語言沒有Java語言中的字符串以加號的方式拼接  /*    %s%s表示字符串拼接    %.4s 從左邊截取4位,只能從左邊截取(從某一地址從左向右開始截取)    -左邊對齊  */  sprintf(command,"%s%.4s",com,mand);//  printf("%s/n",command);  system(command);  system("pause");}

使用sprintf函數結合字符串指針實現身份證的出生日期信息獲取

/*  通過sprintf截取身份證的出身年月日  @author Tony 18601767221@163.com  @since 20160601 14:29*/void sprintf_id() {  char id[19] = "421023198902345678"; //字符串是以/0結尾 因此要多出一個字符長度  printf("身份證號為%s",id);  char bornDate[9] = {0}; //初始化一個字符串保存出生日期  sprintf(bornDate,"%-.8s",id+6);//地址向后移動六位  printf("出身年月日為%s/n",bornDate);}

2.5 printf格式化輸出數據的參數總結

格式符 解析方式
%hd 有符號十進制短整數(short)
%hu 無符號十進制短整數(unsinged short)
%d 有符號十進制整數(int或者long)
%lld 有符號十進制整數(long long)
%#o 無符號八進制整數(#表明進制)
%#x/%#X 無符號十六進制整數(#表明進制,大小寫決定了輸出數據的字母大小寫)
%u 無符號十進制整數
%llu 無符號十進制整數(long long)用于存儲身份證號
%c 字符
%s 字符串
%p 指針地址
%f 浮點數
%a 十六進制浮點數
%e/%E 指數形式的浮點數
%g f和e相比寬度更小的浮點數

3 數據輸入

scanf()函數主要是用于讀取數據(通常來源于文件或者是用戶從鍵盤的輸入),并且按照指定的格式精確匹配(不能遺漏任何字符),絕大多解析數據的數據格式都和printf()一致。在掃描讀取整數,浮點數和字符時通常變量名要加上地址符(&),在掃描讀取字符串時變量名不需要加上地址符。scanf函數返回的是成功讀取輸入數據的個數

scanf()函數的一般形式是scanf(“格式字符串”,變量地址表)

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>/*  scanf讀取用戶從鍵盤的輸入數據  @author Tony 18610767221@163.com  @since 20160601 16:59*/void scanf_sample() {  int num = 0;  printf("num變量的地址為:%p/n",&num); //打印變量的內存地址  scanf("num=%d",&num); //根據地址對應的變量值對變量進行初始化賦值 控制臺中應該輸入num=整數值(例如12)  printf("num=%d/n",num);  int x = 1, y = 2, z = 3;//聲明多個整數  scanf("x=%d,y=%d,z=%d",&x,&y,&z);//命令行窗口應該輸入x=整數值,y=整數值,z=整數值 格式字符串必須完全匹配  printf("x=%d,y=%d,z=%d",x,y,z);  system("pause");}

在使用scanf函數進行讀取數據的匹配時,如果數據類型是字符串,會忽略回車。

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>/*  scanf精確匹配  @author Tony 18601767221@163.com  @since 20160601 17:25*/void scanf_match() {  //當使用字符串(字符數組)時,輸入回車會被忽略  int num=123;  char str[100] = { 0 };  scanf("%d", &num);//掃描讀取num  scanf("%s",str);//掃描讀取字符串  printf("num=%d/n",num);  printf("str=%s/n",str);  system("pause");}

使用sscanf實現數據挖掘的案例:

一次性讀取多個數據時可以使用回車鍵 空格或者是Tab實現數據讀取結束符

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>/*  使用sscanf函數實現數據挖掘  @author Tony 18601767221@163.com  @since 201060601 17:34*/void scanf_match_data() {  char data[300] = "身高 170 年齡 22 體重 96 ";//空格表示讀取結束  int height = 0;  int age = 0;  //使用sscanfh函數讀取字符串到變量中,按照指定的格式匹配  sscanf(data, "%*s %d %*s %d %*s",&height,&age); //按照指定的格式進行數據解析,并讀取到變量中  printf("height=%d/nage=%d/n",height,age);  height >= 170 && (age >= 20 && age <= 22)?printf("是女神標準/n"):printf("不是女神標準/n");  char info[300] = "QQ,1079351401,手機,18601767221,郵箱,18601767221@163.com";  long long qq = 0;  long long mobilePhone = 0;  char email[30] = {0};  //先對字符串中的逗號,轉換成空格 因為當sscanf函數進行字符串解析時,會將逗號后面的內容都當作字符串  for (int i = 0; i < 300;i++) {    if (info[i]==',') {      info[i] = ' ';    }  }  //%*s表示忽略該字符串的內容  sscanf(info,"%*s %lld %*s %lld %*s %s",&qq,&mobilePhone,email);  printf("qq=%lld/nmobilePhone=%lld/nemail=%s/n",qq,mobilePhone,email);  system("pause");}

在使用scanf函數讀取數據時,如果讀取的是浮點數,則不能指定精度。

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>/*  scanf函數的使用注意事項  @author Tony 18601767221@163.com  @since 20160602 10:00*/void scanf_app() {  float fl = 0;  printf("請輸入一個浮點數/n");  scanf("%7.2f",&fl);//scanf匹配浮點數時不能指定精度,此處將會解析數據錯誤  printf("fl=%f/n",fl);  system("pause");}

在使用scanf讀取字符數據時,回車,轉義字符等都會當作一個有效的字符

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>/*  scanf函數的使用注意事項  @author Tony 18601767221@163.com  @since 20160602 10:00*/void scanf_app() {  char ch1='0';  char ch2 = '0';  scanf("%c,%c",&ch1,&ch2);  printf("ch1=[%c],ch2=[%c]",ch1,ch2);//回車符也會被當作輸入的一個字符  system("pause");}

使用scanf函數結合正則表達式掃描匹配指定正則的數據

/*  scanfh函數結合正則表達式的使用  @author Tony 18601767221@163.com  @since 20160604 20:43*/void scanf_regualr_express() {  //正則表達式就是一組驗證數據的規則,常用在網頁中的郵箱,密碼等用戶數據的驗證  char str[200] = {0};  //scanf("%s",str);//默認是以回車中斷讀取數據  //scanf("%[^/n]",str);//處理空格 以回車作為結束讀取  //scanf("%[^=]", str);//讀取非=的數據 等號(=)作為結束讀取(讀取的結果不包含等號)  //scanf("%[^,]", str);//讀取非(^)逗號的數據 逗號(,)作為結束讀取(讀取的結果不包含逗號)  //printf("%s/n",str);   //數字匹配(手機號) 0-9  //scanf("%[0-9]",str);//讀取電話號碼  //printf("%s/n", str);  //字母匹配a-zA-Z  scanf("%[a-zA-Z]", str);//讀取字母,遇到非大小寫字母結束,如果讀取的字符串開頭不匹配 輸出為空  printf("%s/n", str);  //大寫字母匹配A-Z  scanf("%[A-Z]", str);//讀取字母,遇到非大寫字母結束,如果讀取的字符串開頭不匹配 輸出為空  printf("%s/n", str);  //小寫字母匹配a-z  scanf("%[a-z]", str);//讀取字母,遇到非小寫字母結束,如果讀取的字符串開頭不匹配 輸出為空  printf("%s/n", str);}

 感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
午夜精品一区二区三区视频免费看| 91在线观看欧美日韩| 日韩亚洲精品电影| 久久久综合免费视频| 欧美丰满少妇xxxxx| 中文字幕9999| 中文字幕av一区二区| 久久免费视频观看| 成人激情黄色网| 国产精品福利久久久| 欧美国产激情18| 久久久久日韩精品久久久男男| 亚洲的天堂在线中文字幕| 91精品国产99久久久久久| 97在线观看视频| 欧美激情视频三区| 在线亚洲午夜片av大片| 不卡毛片在线看| 国产主播喷水一区二区| 欧美专区在线视频| 亚洲一级片在线看| 成人免费视频网址| 精品久久久久久中文字幕大豆网| 国产精品啪视频| 一区二区欧美日韩视频| 日韩va亚洲va欧洲va国产| 久久手机免费视频| 97人洗澡人人免费公开视频碰碰碰| 91免费综合在线| 国产精品678| 亚洲精品女av网站| 欧美精品18videosex性欧美| 深夜福利一区二区| 亚洲自拍小视频免费观看| 国产91精品久久久久久| 68精品久久久久久欧美| 久久久久久久久网站| 国产精品永久免费视频| 久久久久久久久中文字幕| 亚洲国产欧美一区二区三区久久| 最近2019年手机中文字幕| 欧美性理论片在线观看片免费| 91美女高潮出水| 国产精品88a∨| 亚洲最大的网站| 亚洲а∨天堂久久精品喷水| 亚洲综合在线中文字幕| 欧美日韩国产区| 中文字幕久热精品视频在线| 视频直播国产精品| 欧美激情xxxxx| 91久久久国产精品| 国产精自产拍久久久久久| 国产精品一区二区三| 国产精品久久久久久av福利软件| 一本色道久久88精品综合| 日本高清久久天堂| 福利视频导航一区| 国产精品久久久久一区二区| 欧美日韩中文字幕| www.国产精品一二区| 欧美另类交人妖| 一区二区三区日韩在线| www.日韩系列| 欧美日韩国产色| 91亚洲午夜在线| 国产精品白丝jk喷水视频一区| 亚洲美女又黄又爽在线观看| 一区二区在线视频播放| 日韩在线视频网站| 国产成人+综合亚洲+天堂| 亚洲第一区在线观看| 亚洲欧美中文字幕| 最新91在线视频| 日韩欧美在线视频日韩欧美在线视频| 日韩在线精品视频| 亚洲国产毛片完整版| 亚洲黄一区二区| 国产精品a久久久久久| 日本久久久久久久久久久| 精品视频在线导航| 91在线免费网站| 久久成人一区二区| 中文字幕日韩电影| 久久中文精品视频| 欧美日韩亚洲成人| 最近2019年手机中文字幕| 亚洲一级一级97网| 精品在线欧美视频| 欧洲成人午夜免费大片| 亚洲sss综合天堂久久| 亚洲自拍av在线| 欧美性猛交xxxx黑人猛交| 亚洲成人网久久久| 成人精品aaaa网站| 日韩免费看的电影电视剧大全| 亚洲白拍色综合图区| 国产精品h在线观看| 国内精品一区二区三区四区| 久久成人18免费网站| 91sao在线观看国产| 欧美视频精品一区| 欧美精品久久久久久久久久| 欧美日韩美女在线观看| 91九色国产视频| 欧美老少配视频| 精品人伦一区二区三区蜜桃网站| 色系列之999| 欧美国产日韩中文字幕在线| 国产精品中文在线| 亚洲精品之草原avav久久| 精品久久久久久久中文字幕| 成人激情视频在线观看| 性夜试看影院91社区| 久久久久久久久久婷婷| 日韩av网址在线观看| 国产视频一区在线| 成人黄色片在线| 国产伦精品一区二区三区精品视频| www.日本久久久久com.| 国产日本欧美一区二区三区在线| 亚洲黄色av网站| 最近2019中文字幕大全第二页| xvideos成人免费中文版| 欧美成人免费小视频| 国产啪精品视频网站| 5252色成人免费视频| 黑人狂躁日本妞一区二区三区| 欧美日韩电影在线观看| 亚洲在线www| 亚洲激情视频网站| 国产精品久久999| 成年人精品视频| 粗暴蹂躏中文一区二区三区| 日韩美女在线观看| 91精品国产综合久久男男| 中文字幕免费精品一区| 国内精品久久久久久中文字幕| 高清一区二区三区日本久| 久久久成人精品视频| 亚洲自拍偷拍色片视频| 欧美日韩一区二区三区| 在线视频国产日韩| 日韩精品极品在线观看播放免费视频| 国产精品久久久久久亚洲调教| 亚洲视频在线看| 亚洲精品一区二区网址| 欧美激情亚洲一区| 欧美日本啪啪无遮挡网站| 九九久久久久久久久激情| 午夜精品蜜臀一区二区三区免费| 久久精品国产久精国产思思| 国产99久久精品一区二区永久免费| 日韩精品极品在线观看播放免费视频| 欧美另类99xxxxx| 欧美日韩在线影院| 欧美人在线观看| 亚洲女在线观看| 亚洲精品国产精品国自产在线| 一区二区欧美日韩视频| 日本精品一区二区三区在线播放视频| 国产日韩欧美一二三区| 国产福利成人在线| 国产精品亚洲激情|