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

C語言數(shù)據(jù)輸入與輸出實例詳解

 更新時間:2017年06月21日 14:19:56   作者:boy_cto_tony  
這篇文章主要介紹了C語言數(shù)據(jù)輸入與輸出實例詳解的相關資料,需要的朋友可以參考下

C語言數(shù)據(jù)輸入與輸出實例詳解

1 概論

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

2 數(shù)據(jù)輸出

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

2.1 輸出數(shù)據(jù)到網(wǎng)頁

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

#include <stdio.h>
/*
使用printf輸出數(shù)據(jù)到網(wǎng)頁
@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");//聲明輸出的數(shù)據(jù)格式是HTML語言
  printf("Hello World In HTML");
}

2.2 整數(shù)格式化輸出

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

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

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

使用printf打印字符串,整數(shù)和字符的案例

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

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

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

#include <stdio.h>
/*
  輸出指定格式的整數(shù)數(shù)據(jù)
  如果要在網(wǎng)頁下顯示數(shù)據(jù),還需要使用printf實現(xiàn)匹配不同的數(shù)據(jù)格式
  @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位以上的系統(tǒng)%d和%ld是等效的 inth和long是等效的
  printf("%10d\n",num);//寬度為10,數(shù)據(jù)顯示默認是右邊對齊
  printf("%010d\n",num);//寬度為10,如果不足則用0來補充
  printf("%-10d\n",num);//寬度為10,默認是按照右邊對齊, "-"表示左邊對齊
  printf("%3d\n",12345); //12345大于實際寬度,3d的格式無效,不足使用空格填充

/*
  輸出指定格式的整數(shù)(有無符號類型以及三種進制類型的)數(shù)據(jù)
  如果要在網(wǎng)頁下顯示數(shù)據(jù),還需要匹配不同的格式
  @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 浮點數(shù)格式化輸出

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

#include <stdio.h>
/*
  輸出指定格式的浮點數(shù)數(shù)據(jù)
  @author Tony 18601767221@163.com
  @since 20160530 10:06
*/
void printf_format_double() {

  const double num = 3.14159265359;
  printf("num=%.2f\n", num);//小數(shù)點后保留兩位
  printf("num=%030.10f\n",num);//寬度為30,不足用0補齊,否則按實際寬度輸出

  //科學計數(shù)法表示
  double depth = 1234567000000.0;
  printf("depth=%e\n",depth);//指數(shù)表示


  double value = 1.23456789;// %g 自動選擇寬度少的顯示數(shù)據(jù) %f.%e
  printf("value=%f\tvalue=%e\tvalue=%g",value,value,value);

}

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

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

#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函數(shù)實現(xiàn)將字符串按照指定的格式拼接:

#include <stdio.h>
/*
  輸出指定格式的字符串數(shù)據(jù)
  @author Tony 18601767221@163.com
  @since 20160530 10:08
*/
void printf_format_string() {
  char str[100] = "calc"; //輸出字符串
  printf("%s\n",str);
}

/*
  使用sprintf函數(shù)實現(xiàn)字符串拼接
  @author Tony 18601767221@163.com
  @since 20160530 10:32
*/
void sprintf_string_append() {
  char command[100] = { 0 };
  sprintf(command, "color %c%c", '4', 'f');//將整數(shù) 實數(shù)和字符串整合到一個字符串
  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函數(shù)結合字符串指針實現(xiàn)身份證的出生日期信息獲取

/*
  通過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格式化輸出數(shù)據(jù)的參數(shù)總結

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

3 數(shù)據(jù)輸入

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

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

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

/*
  scanf讀取用戶從鍵盤的輸入數(shù)據(jù)
  @author Tony 18610767221@163.com
  @since 20160601 16:59
*/
void scanf_sample() {
  int num = 0;
  printf("num變量的地址為:%p\n",&num); //打印變量的內存地址
  scanf("num=%d",&num); //根據(jù)地址對應的變量值對變量進行初始化賦值 控制臺中應該輸入num=整數(shù)值(例如12)
  printf("num=%d\n",num);

  int x = 1, y = 2, z = 3;//聲明多個整數(shù)
  scanf("x=%d,y=%d,z=%d",&x,&y,&z);//命令行窗口應該輸入x=整數(shù)值,y=整數(shù)值,z=整數(shù)值 格式字符串必須完全匹配
  printf("x=%d,y=%d,z=%d",x,y,z);
  system("pause");

}

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

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
/*
  scanf精確匹配
  @author Tony 18601767221@163.com
  @since 20160601 17:25
*/
void scanf_match() {
  //當使用字符串(字符數(shù)組)時,輸入回車會被忽略
  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實現(xiàn)數(shù)據(jù)挖掘的案例:

一次性讀取多個數(shù)據(jù)時可以使用回車鍵 空格或者是Tab實現(xiàn)數(shù)據(jù)讀取結束符

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
/*
  使用sscanf函數(shù)實現(xiàn)數(shù)據(jù)挖掘
  @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函數(shù)讀取字符串到變量中,按照指定的格式匹配
  sscanf(data, "%*s %d %*s %d %*s",&height,&age); //按照指定的格式進行數(shù)據(jù)解析,并讀取到變量中

  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函數(shù)進行字符串解析時,會將逗號后面的內容都當作字符串
  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函數(shù)讀取數(shù)據(jù)時,如果讀取的是浮點數(shù),則不能指定精度。

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

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

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
/*
  scanf函數(shù)的使用注意事項
  @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函數(shù)結合正則表達式掃描匹配指定正則的數(shù)據(jù)

/*
  scanfh函數(shù)結合正則表達式的使用
  @author Tony 18601767221@163.com
  @since 20160604 20:43
*/
void scanf_regualr_express() {
  //正則表達式就是一組驗證數(shù)據(jù)的規(guī)則,常用在網(wǎng)頁中的郵箱,密碼等用戶數(shù)據(jù)的驗證

  char str[200] = {0};
  //scanf("%s",str);//默認是以回車中斷讀取數(shù)據(jù)
  //scanf("%[^\n]",str);//處理空格 以回車作為結束讀取
  //scanf("%[^=]", str);//讀取非=的數(shù)據(jù) 等號(=)作為結束讀取(讀取的結果不包含等號)
  //scanf("%[^,]", str);//讀取非(^)逗號的數(shù)據(jù) 逗號(,)作為結束讀取(讀取的結果不包含逗號)
  //printf("%s\n",str); 

  //數(shù)字匹配(手機號) 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);
}

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

相關文章

  • C語言數(shù)據(jù)結構實現(xiàn)銀行模擬

    C語言數(shù)據(jù)結構實現(xiàn)銀行模擬

    這篇文章主要介紹了C語言數(shù)據(jù)結構實現(xiàn)銀行模擬的相關資料,通過此文希望大家能理解離散化的方法,希望能幫助到大家,需要的朋友可以參考下
    2017-08-08
  • C++?引用與內聯(lián)函數(shù)詳情

    C++?引用與內聯(lián)函數(shù)詳情

    這篇文章主要介紹了C++?引用與內聯(lián)函數(shù)詳情,主要分享一下關于引用的知識點,這里都是一些比較基礎的知識,適合初學者,下文續(xù)航徐介紹需要的小伙伴可以參考一下
    2022-05-05
  • C語言實現(xiàn)通訊錄系統(tǒng)程序

    C語言實現(xiàn)通訊錄系統(tǒng)程序

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)通訊錄系統(tǒng)程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C++另辟蹊徑計算1到n的和

    C++另辟蹊徑計算1到n的和

    從1加到100,高斯的故事,我們學過。今天,我們寫一個程序來試試。首先,用笨方法。一個數(shù)一個數(shù)的加,我們一般人就是這樣干的嗎。在計算機程序里面,怎么辦呢?1我們把求和的功能寫成一個可以針對不同的N運用的,C++里面叫函數(shù)
    2023-02-02
  • visual studio 2022中的scanf問題解決

    visual studio 2022中的scanf問題解決

    昨天在使用Visual Studio 2022編寫C語言程序時遇到了scanf問題,對于vs的編譯器來說scanf是不安全的,編譯器通過不了scanf,本文就來介紹一下解決方法,感興趣的可以了解一下
    2023-12-12
  • C語言實現(xiàn)順序表的順序查找和折半查找

    C語言實現(xiàn)順序表的順序查找和折半查找

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)順序表的順序查找和折半查找,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • C++實現(xiàn)簡單的HTTP服務器

    C++實現(xiàn)簡單的HTTP服務器

    這篇文章主要為大家詳細介紹了C++實現(xiàn)簡單的HTTP服務器的相關資料,感興趣的朋友可以參考下
    2016-05-05
  • 簡明的C++函數(shù)指針學習教程

    簡明的C++函數(shù)指針學習教程

    這篇文章主要介紹了C++函數(shù)指針的學習教程,講到了函數(shù)指針的定義及把指針作為函數(shù)參數(shù)進行傳遞的用法,需要的朋友可以參考下
    2016-04-04
  • 帶你粗略了解C++中的深淺拷貝

    帶你粗略了解C++中的深淺拷貝

    這篇文章主要給大家介紹了關于c++中深淺拷貝以及寫時拷貝實現(xiàn)的相關資料,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面跟著小編來一起學習學習吧
    2021-08-08
  • c++下迭代器總結

    c++下迭代器總結

    大家好,本篇文章主要講的是c++下迭代器總結,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12

最新評論

三台县| 肥西县| 望奎县| 府谷县| 礼泉县| 自治县| 车致| 高邮市| 莱州市| 清苑县| 井陉县| 华蓥市| 仁怀市| 都昌县| 迁安市| 年辖:市辖区| 合川市| 磐石市| 晋州市| 资源县| 阜新市| 安仁县| 灵武市| 云霄县| 富源县| 克山县| 庆阳市| 万荣县| 石楼县| 浦城县| 定南县| 莒南县| 利津县| 厦门市| 九江县| 淮安市| 宜黄县| 三门县| 沽源县| 扎赉特旗| 神农架林区|