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

詳解C語言中printf輸出的相關函數(shù)

 更新時間:2015年08月31日 11:38:56   投稿:goldensun  
這篇文章主要介紹了C語言中printf輸出的相關函數(shù)總結,是C語言入門學習中的基礎知識,需要的朋友可以參考下

C語言printf()函數(shù):格式化輸出函數(shù)
printf()函數(shù)是最常用的格式化輸出函數(shù),其原型為:

  int printf( char * format, ... );

printf()會根據(jù)參數(shù) format 字符串來轉換并格式化數(shù)據(jù),然后將結果輸出到標準輸出設備(顯示器),直到出現(xiàn)字符串結束('\0')為止。

參數(shù) format 字符串可包含下列三種字符類型:

  1. 一般文本,將會直接輸出
  2. ASCII 控制字符,如\t、\n 等有特定含義
  3. 格式轉換字符

格式轉換為一個百分比符號(%)及其后的格式字符所組成。一般而言,每個%符號在其后都必需有一個參數(shù)與之相呼應(只有當%%轉換字符出現(xiàn)時會直接輸出%字符),而欲輸出的數(shù)據(jù)類型必須與其相對應的轉換字符類型相同。

printf()格式轉換的一般形式如下:

  %(flags)(width)(. prec)type

以括號括起來的參數(shù)為選擇性參數(shù),而%與type 則是必要的,下面介紹 type 的幾種形式。

1) 整數(shù)

  • %d  整數(shù)的參數(shù)會被轉成有符號的十進制數(shù)字
  • %u  整數(shù)的參數(shù)會被轉成無符號的十進制數(shù)字
  • %o  整數(shù)的參數(shù)會被轉成無符號的八進制數(shù)字
  • %x  整數(shù)的參數(shù)會被轉成無符號的十六進制數(shù)字,并以小寫abcdef 表示
  • %X  整數(shù)的參數(shù)會被轉成無符號的十六進制數(shù)字,并以大寫ABCDEF 表示浮點型數(shù)
  • %f double  型的參數(shù)會被轉成十進制數(shù)字,并取到小數(shù)點以下六位,四舍五入
  • %e double  型的參數(shù)以指數(shù)形式打印,有一個數(shù)字會在小數(shù)點前,六位數(shù)字在小數(shù)點后,而在指數(shù)部分會以小寫的e 來表示
  • %E 與%e 作用相同,唯一區(qū)別是指數(shù)部分將以大寫的E 來表示
  • %g double  型的參數(shù)會自動選擇以%f 或%e 的格式來打印,其標準是根據(jù)打印的數(shù)值及所設置的有效位數(shù)來決定。
  • %G 與%g 作用相同,唯一區(qū)別在以指數(shù)形態(tài)打印時會選擇%E 格式。

2) 字符及字符串

  • %c 整型數(shù)的參數(shù)會被轉成unsigned char 型打印出
  • %s 指向字符串的參數(shù)會被逐字輸出,直到出現(xiàn)NULL 字符為止
  • %p 如果是參數(shù)是"void *"型指針則使用十六進制格式顯示

prec 有幾種情況:

  • 正整數(shù)的最小位數(shù)
  • 在浮點型數(shù)中代表小數(shù)位數(shù)
  • 格式代表有效位數(shù)的最大值
  • 在%s 格式代表字符串的最大長度
  • 若為×符號則代表下個參數(shù)值為最大長度

width 為參數(shù)的最小長度,若此欄并非數(shù)值,而是*符號,則表示以下一個參數(shù)當做參數(shù)長度。

flags 有下列幾種情況

  • +  一般在打印負數(shù)時,printf ()會加印一個負號,整數(shù)則不加任何負號,此旗標會使得在打印正數(shù)前多一個正號 (+)。
  • #  此旗標會根據(jù)其后轉換字符的不同而有不同含義。當在類型為o 之前 (如%#o),則會在打印八進制數(shù)值前多印一個o。而在類型為x 之前 (%#x)則會在打印十六進制數(shù)前多印'0x',在型態(tài)為e、E、f、g 或G 之前則會強迫數(shù)值打印小數(shù)點。在類型為g 或G 之前時則同時保留小數(shù)點及小數(shù)位數(shù)末尾的零。
  • 0  當有指定參數(shù)時,無數(shù)字的參數(shù)將補上0。默認是關閉此旗標,所以一般會打印出空白字符。

【返回值】成功則返回寫入的字符數(shù)目。

如果發(fā)生寫入錯誤,將會設置文件錯誤標志(可通過 ferror() 檢測),并返回一個負數(shù)。

如果在寫入寬字符時一個多字節(jié)的字符發(fā)生編碼錯誤,那么 errno 將被設置為 EILSEQ,并返回一個負數(shù)。

printf( format, ... ) 等價于 fprintf(stdout, format, ...),更多信息請參考 fprintf() 函數(shù)。

【實例】分別輸出整數(shù)、浮點數(shù)和字符串。

#include<stdio.h>
int main(void)
{
  int a=1;
  float b=5.0;
  char str[100]= "";
  scanf("%c %c %c",&a,&b,str);
  /*分別演示 整數(shù)*/
  printf("int is:%d\n",a);
  /*分別演示 浮點數(shù)*/
  printf("float is:%f\n",b);
  /*分別演示 字符串*/
  printf("char is:%s\n",str);
  
  return 0;
}

輸出結果:
【運行結果】

1 4.4 fs
int is:1
float is:4.400000
char is:fs

例子首先是等待用戶輸入整數(shù)浮點數(shù)和一個字符串,然后調用函數(shù)printf()按照對應的格式輸出。

又如,輸出更多格式的數(shù)據(jù)。

#include <stdio.h>
int main()
{
  printf ("Characters: %c %c \n", 'a', 65);
  printf ("Decimals: %d %ld\n", 1977, 650000L);
  printf ("Preceding with blanks: %10d \n", 1977);
  printf ("Preceding with zeros: %010d \n", 1977);
  printf ("Some different radices: %d %x %o %#x %#o \n", 100, 100, 100, 100, 100);
  printf ("floats: %4.2f %+.0e %E \n", 3.1416, 3.1416, 3.1416);
  printf ("Width trick: %*d \n", 5, 10);
  printf ("%s \n", "A string");
  return 0;
}

輸出結果:

Characters: a A
Decimals: 1977 650000
Preceding with blanks:    1977
Preceding with zeros: 0000001977
Some different radices: 100 64 144 0x64 0144
floats: 3.14 +3e+000 3.141600E+000
Width trick:  10
A string

C語言fprintf()函數(shù):輸出函數(shù)(格式化輸出數(shù)據(jù)至文件)
頭文件:

#include <stdio.h>

定義函數(shù):

int fprintf(FILE * stream, const char * format, ...);

函數(shù)說明:fprintf()會根據(jù)參數(shù)format 字符串來轉換并格式化數(shù)據(jù), 然后將結果輸出到參數(shù)stream 指定的文件中, 直到出現(xiàn)字符串結束('\0')為止。

返回值:關于參數(shù)format 字符串的格式請參考printf(). 成功則返回實際輸出的字符數(shù), 失敗則返回-1, 錯誤原因存于errno 中.

范例

#include <stdio.h>
main()
{
  int i = 150;
  int j = -100;
  double k = 3.14159;
  fprintf(stdout, "%d %f %x \n", j, k, i);
  fprintf(stdout, "%2d %*d\n", i, 2, i);
}

執(zhí)行:

-100 3.141590 96
150 150

C語言sprintf()函數(shù):將格式化的數(shù)據(jù)寫入字符串
頭文件:

#include <stdio.h>

sprintf()函數(shù)用于將格式化的數(shù)據(jù)寫入字符串,其原型為:

int sprintf(char *str, char * format [, argument, ...]);

【參數(shù)】str為要寫入的字符串;format為格式化字符串,與printf()函數(shù)相同;argument為變量。

除了前兩個參數(shù)類型固定外,后面可以接任意多個參數(shù)。而它的精華,顯然就在第二個參數(shù)--格式化字符串--上。 printf()和sprintf()都使用格式化字符串來指定串的格式,在格式串內部使用一些以“%”開頭的格式說明符(format specifications)來占據(jù)一個位置,在后邊的變參列表中提供相應的變量,最終函數(shù)就會用相應位置的變量來替代那個說明符,產生一個調用者想要的字符串。

sprintf()最常見的應用之一莫過于把整數(shù)打印到字符串中,如:

  •     sprintf(s, "%d", 123);  //把整數(shù)123打印成一個字符串保存在s中
  •     sprintf(s, "%8x", 4567);  //小寫16進制,寬度占8個位置,右對齊

sprintf的作用是將一個格式化的字符串輸出到一個目的字符串中,而printf是將一個格式化的字符串輸出到屏幕。sprintf的第一個參數(shù)應該是目的字符串,如果不指定這個參數(shù),執(zhí)行過程中出現(xiàn) "該程序產生非法操作,即將被關閉...."的提示。

sprintf()會根據(jù)參數(shù)format 字符串來轉換并格式化數(shù)據(jù),然后將結果復制到參數(shù)str 所指的字符串數(shù)組,直到出現(xiàn)字符串結束('\0')為止。關于參數(shù)format 字符串的格式請參考printf()。

【返回值】成功則返回參數(shù)str 字符串長度,失敗則返回-1,錯誤原因存于errno 中。

注意:C語言對數(shù)組進行操作時并不檢測數(shù)組的長度,如果str的長度不夠,sprintf()很容易造成緩沖區(qū)溢出,帶來意想不到的后果,黑客經常利用這個弱點攻擊看上去安全的系統(tǒng)。請看下面的代碼:

#include <stdio.h>
main()
{
  char buf[10];
  sprintf(buf, "The length of the string is more than 10");
  printf("%s", buf);
}

編譯并運行,屏幕上輸出”The length of the string is more than 10“,同時系統(tǒng)提示程序已經停止。原因就是要寫入的字符串的長度超過了buf的長度,造成緩沖區(qū)溢出。

使用snprintf()來代替sprintf()將能夠很好的解決這個問題。

【實例】打印字母a的ASCII值。

#include <stdio.h>
main()
{
  char a = 'a';
  char buf[80];
  sprintf(buf, "The ASCII code of a is %d.", a);
  printf("%s", buf);
}

運行結果:

The ASCII code of a is 97.

又如,產生10個100以內的隨機數(shù)并輸出。

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void)
{
  char str[100];
  int offset =0;
  int i=0;
  srand(time(0)); // *隨機種子
  for(i = 0;i<10;i++)
  {
    offset+=sprintf(str+offset,"%d,",rand()%100); // 格式化的數(shù)據(jù)寫入字符串
  }
  str[offset-1]='\n';
  printf(str);
  return 0;
}

運行結果:

74,43,95,95,44,90,70,23,66,84

例子使用了一個新函數(shù)srand(),它能產生隨機數(shù)。例子中最復雜的部分是for循環(huán)中每次調用函數(shù)sprintf()往字符數(shù)組寫數(shù)據(jù)的時候,str+foffset為每次寫入數(shù)據(jù)的開始地址,最終的結果是所有產生的隨機數(shù)據(jù)都被以整數(shù)的形式存入數(shù)組中。

相關文章

  • C++基于socket編程實現(xiàn)聊天室功能

    C++基于socket編程實現(xiàn)聊天室功能

    這篇文章主要介紹了C++基于socket編程實現(xiàn)聊天室功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C++設計模式之Proxy模式(代理模式)詳解

    C++設計模式之Proxy模式(代理模式)詳解

    這篇文章主要為大家詳細介紹了C++設計模式之Proxy模式的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • C++發(fā)送郵件實現(xiàn)代碼

    C++發(fā)送郵件實現(xiàn)代碼

    這篇文章主要為大家詳細介紹了C++發(fā)送郵件的實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • 解析C#中不一樣的大小寫轉換

    解析C#中不一樣的大小寫轉換

    本篇文章是對C#中大小寫轉換的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • opencv?C++模板匹配的簡單實現(xiàn)

    opencv?C++模板匹配的簡單實現(xiàn)

    這篇文章主要介紹了opencv?C++模板匹配的簡單實現(xiàn),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • C語言切割多層字符串(strtok_r strtok使用方法)

    C語言切割多層字符串(strtok_r strtok使用方法)

    這篇文章主要介紹了C語言切割多層字符串的方法,說了strtok的弱點,使用strtok_r的方法
    2013-11-11
  • 深入探討:linux中遍歷文件夾下的所有文件

    深入探討:linux中遍歷文件夾下的所有文件

    本篇文章是對linux中遍歷文件夾下的所有文件進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C++項目求Fibonacci數(shù)列的參考解答

    C++項目求Fibonacci數(shù)列的參考解答

    今天小編就為大家分享一篇關于C++項目求Fibonacci數(shù)列的參考解答,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • unsigned中無符號是什么詳析

    unsigned中無符號是什么詳析

    unsigned為“無符號”的意思,unsigned,zerofill既為非負數(shù),用此類型可以增加數(shù)據(jù)長度,下面這篇文章主要給大家介紹了關于unsigned中無符號是什么的相關資料,需要的朋友可以參考下
    2023-01-01
  • 在C語言里單引號和雙引號的區(qū)別

    在C語言里單引號和雙引號的區(qū)別

    這篇文章主要介紹了在C語言里單引號和雙引號的區(qū)別,本文通過代碼的實例和注釋的詳細的說明了單引號和雙引號的概念與區(qū)別,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07

最新評論

青阳县| 菏泽市| 蒙阴县| 合作市| 金寨县| 云和县| 克东县| 大港区| 庆城县| 灵寿县| 思南县| 东平县| 永顺县| 缙云县| 科技| 凤阳县| 乌拉特后旗| 鄂温| 阳城县| 察隅县| 巴彦县| 拉萨市| 章丘市| 平谷区| 醴陵市| 上饶市| 波密县| 偏关县| 焦作市| 岗巴县| 黑山县| 钟山县| 湖口县| 曲靖市| 宽城| 兰溪市| 雅安市| 汽车| 涡阳县| 安远县| 武鸣县|