C語言學習【printf函數和scanf函數】

C語言學習【printf函數和scanf函數】

printf()函數和scanf()函數可以讓用戶與程序交流,是輸入/輸出函數

printf()函數

請求printf()函數打印數據的指令要與待打印數據的類型相匹配。例如,打印整數時使用%d,打印字符時使用%c。這些符號被稱為轉換說明(conversion specification),它們指定了如何把數據轉換成可顯示的形式

如下圖所屬我i欸轉換說明及其打印的輸出結果

/* 使用轉換說明 */
#include "stdio.h"
#define PI 3.1415926int main(void)
{int number = 7;float pies = 12.75;int cost = 7800;printf("The %d contestants ate %f berry pies.\n", number, pies);printf("The value of pi is %f.\n", PI);printf("Farewell! thou art too dear for my possessing, \n");printf("%c%d\n", '$', 2 * cost);
}

程序運行結果

The 7 contestants ate 12.750000 berry pies. 
The value of pi is 3.141593.
Farewell! thou art too dear for my possessing, 
$15600

printf()函數格式為

printf(格式字符串, 待打印項 1, 待打印項 2,...);

printf()輸出百分號:使用兩個%即可

/* printf 輸出 % */
#include "stdio.h"int main(void)
{int radio = 12;printf("%d%%", radio);
}

程序運行結果

12%

printf()的轉換說明修飾符

下圖所示為printf()的修飾符

printf()中的標記

使用修飾符和標記的示例程序(字段寬度打印輸出整數時的效果)

/* 字段寬度 */
#include "stdio.h"#define PAGES 959int main(void)
{printf("*%d*\n", PAGES);printf("*%2d*\n", PAGES);printf("*%10d*\n", PAGES);printf("*%-10d*\n", PAGES);}

程序運行結果

*959*
*959*
*       959*
*959       *

第一個轉換說明%d不帶任何修飾符,其對應輸出結果與帶整數字段寬度的轉換說明的輸出結果相同;
第二個轉換說明是%2d,其對應的輸出結果應該該是2字段度。因為待打印的整數有3位數字,所以字段寬度自動擴大以符合整數的長度;
第3個轉換說明是%10d,其對應的輸出結果有10個空格寬度,實際上在兩個星號之間有7個空格和3位數字,并且數字位于字段的右側;
最后一個轉換說明是%-10d,其對應的輸出結果同樣是10個空格寬度,-標記說明打印的數字位于字段的左側.

浮點型格式效果

/* 一些浮點型修飾符的組合 *//* 一些浮點型修飾符的組合 */#include "stdio.h"int main(void)
{const double RENT = 3852.99;     /* const 常量 */printf("*%f*\n", RENT);                  /* 字段寬度和小數點文書均為系統默認 小數點后打印6位數字 */printf("*%e*\n", RENT);                  /* %e 編譯器在小數點左側打印一個數字 小數點右側打印6個數字 */printf("*%4.2f*\n", RENT);               /* */printf("*%3.1f*\n", RENT);printf("*%10.3f*\n", RENT);printf("*%10.3E*\n", RENT);printf("*%+4.2f*\n", RENT);              /* +代數標記 */printf("*%010.2f*\n", RENT);             /* 補齊方式 */
}

程序運行結果

*3852.990000*  
*3.852990e+003*
*3852.99*
*3853.0*
*  3852.990*
*3.853E+003*
*+3852.99*
*0003852.99*

其他組合

/* 演示一些格式標記 */#include "stdio.h"int main(void)
{printf("%x %X %#x\n", 31, 31, 31);printf("**%d**% d**% d**\n", 42, 42, -42);printf("**%5d**%5.3d**%05d**%05.3d**\n", 6, 6, 6, 6);}

程序運行結果

1f 1F 0x1f
**42** 42**-42**
**    6**  006**00006**  006**

第1行輸出中,1f是十六進制數,等于十進制數31,第1行 printf()語句中,根據%x打印出1f%F打印出1F%#x打印出0x1f
第 2 行輸出演示了如何在轉換說明中用空格在輸出的正值前面生成前導空格,負值前面不產生前導空格。這樣的輸出結果比較美觀,因為打印出來的正值和負值在相同字段寬度下的有效數字位數相同;
第 3 行輸出演示了如何在整型格式中使用精度(%5.3d)生成足夠的前導 0 以滿足最小位數的要求(本例是 3)。然而,使用 0 標記會使得編譯器用前導 0 填充滿整個字段寬度。最后,如果 0 標記和精度一起出現,0 標記會被忽略。

字符串格式的示例

/* 字符串格式 */#include "stdio.h"#define BLURB "Authentic imitation!"int main(void)
{printf("[%2s]\n", BLURB);printf("[%24s]\n", BLURB);printf("[%24.5s]\n", BLURB);printf("[%-24.5s]\n", BLURB);
}

程序運行結果

[Authentic imitation!]    
[    Authentic imitation!]
[                   Authe]
[Authe                   ]

-標記使得文本左對齊輸出.

轉換(conversion)說明的意義

76在計算機內部的存儲格式為二進制數0100 1100%d轉換說明將其轉換成字符76,并顯示為76%x轉換說明把相同的值0100 1100轉化成十六進制計數法4c%c轉換說明把0100 1100轉換成字符L

轉換說明應該與待答應值得類型相匹配

以下是一些不匹配的整型轉換示例

/* 一些不匹配的整型轉換 */
#include "stdio.h"#define PAGES 336
#define WORDS 65618int main(void)
{short num = PAGES;short mnum = -PAGES;printf("num as short and unsigned short: %hd %hu\n", num, num);printf("-num as short and unsigned short: %hd %hu\n", mnum, mnum);printf("num as int and char: %d %c\n", num, num);printf("WORDS as int, short, and char: %d %hd %c\n", WORDS, WORDS, WORDS);}

程序運行結果

num as short and unsigned short: 336 336
-num as short and unsigned short: -336 65200
num as int and char: 336 P
WORDS as int, short, and char: 65618 82 R

%u表示無符號;
short int的大小是2字節;系統采用二進制補碼來表示有符號整數;數字0~32767代表它們本身,而32768~65535則表示負數,其中65535表示-1,依此類推.

當 printf()使用%c 打印 336 時,它只會查看儲存 336 的 2 字節中的后 1 字節
用%hd 轉換說明打印時,printf()只使用最后 2 個字節


混淆整型和浮點型

/* 不匹配的浮點型轉換 */#include "stdio.h"int main(void)
{float n1 = 3.0;double n2 = 3.0;long n3 = 2000000000;long n4 = 1234567890;printf("%.1e %.1e %.1e %.1e\n", n1, n2, n3, n4);printf("%ld %ld\n", n3, n4);printf("%ld %ld %ld %ld\n", n1, n2, n3, n4);}

程序運行結果

3.0e+000 3.0e+000 9.9e-315 6.1e-315
2000000000 1234567890
0 0 2000000000 1234567890

第1 行輸出顯示,%e轉換說明沒有把整數轉換成浮點數;
float 類型的值作為 printf()參數時會被轉換成 double 類型。
在本系統中,float 是 4 字節,但是為了 printf()能正確地顯示該值,n1 被擴成 8 字節

參數傳遞

棧(stack)

printf("%ld %ld %ld %ld\n", n1, n2, n3, n4);

n1 被儲存在棧中,占 8 字節(float 類型被轉換成 double 類型)。同樣,n2 也在棧中占 8 字節,而 n3 和 n4 在棧中分別占 4 字節;
%ld 轉換說明表明 printf()應該讀取 4 字節

printf()函數的返回值

printf()函數也有一個返回值,它返回打印字符的個數。如果有輸出錯誤,printf()則返回一個負值

/* printf()的返回值 */#include "stdio.h"int main(void)
{int bph2o = 212;int rv;rv  =printf("%d F is water's boiling point.\n", bph2o);printf("The printf() function printed %d characrters.\n", rv);return 0;
}

程序運行結果

212 F is water's boiling point.
The printf() function printed 32 characrters.

在字符串中,可以使用\n 來表示換行字符,但是不能通
過按下 Enter(或 Return)鍵產生實際的換行符。

打印較長字符串的方法

/* 打印較長字符串 */#include "stdio.h"int main(void)
{printf("Here's one way to print a ");printf("long string.\n");printf("Here's another way to print a \long string.\n");printf("Here's the newest way to print a ""long string.\n");        /* ANSI C */return 0;
}

程序運行結果

Here's one way to print a long string.        
Here's another way to print a     long string.
Here's the newest way to print a long string. 

示例二

/* 打印較長字符串 */#include "stdio.h"int main(void)
{printf("Hello, young lovers, wherever you are.\n");printf("Hello, young"    " lovers" ", wherever you are.\n");printf("Hello, young lovers" ", wherever you are.");}

程序運行結果

Hello, young lovers, wherever you are.
Hello, young lovers, wherever you are.
Hello, young lovers, wherever you are.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/12953.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/12953.shtml
英文地址,請注明出處:http://en.pswp.cn/web/12953.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

實戰項目技術點(1)

1、什么是REST? REST(Representational State Transfer),表述性狀態轉換,它是一種軟件架構風格。傳統URL風格如下: http://localhost:8080/user/getById?id1 GET:查詢id為1的用戶 http://loc…

網絡常識一:常用工具

作為后端開發,特別是網絡游戲后端開發,經常需要處理各種現網問題,其中有不少是網絡相關的。 下面列舉的工具主要是在 linux 下的,診斷線上服務器問題的時候,往往是分秒必爭,所以這些工具都要用得很熟練&am…

程序在銀河麒麟系統下實現開機自啟及創建桌面快捷方式

目錄 1. 機器環境說明 2. 程序開機自啟動設置 2.桌面快捷方式設置 3. 附加說明 1. 機器環境說明 機器安裝的銀河麒麟操作系統屬性如下: 2. 程序開機自啟動設置 第1步:編寫一個腳本,用于自動化啟動,為便于后文描述,該腳本名稱…

干貨教程【軟件篇】| 免費實現游戲加速自由

需要這個游戲加速軟件的小伙伴可以關注一下文章底部公眾號,回復關鍵詞【zdjs】即可獲取。 該軟件可以實現免費的游戲加速,實測延遲低體驗好! 建議看到后趕緊保存下來防止丟失! 下面講一下該軟件安裝流程~ 通過鏈接可以得到下面…

2.go語言初始(二)

本篇博客涉及到go 的基礎數據類型、 go 語言中的運算符、轉義字符、格式化輸出、字符串操作 go 語言中的運算符 在 go 語言中,基本數據類型主要包括以下幾類:整數類型、浮點數類型、復數類型、布爾類型、字符串類型、字節類型(byte&#xf…

Linux進程控制——Linux進程程序替換

前言:Linux進程控制包含了進程終止,進程等待,進程程序替換。走到現在我們也只剩下進程程序替換沒介紹了,那么讓我們來看看進程程序替換到底是什么! 本篇主要內容: 替換原理 替換函數 實現簡易shell 我們所創…

【sql】sql中with as 介紹與使用jsqlparser解析sql

文章目錄 一. 定義二. 用法三. 解析 一. 定義 with A as (select * from class) 也就是將重復用到的大批量 的SQL語句,放到with as 中,加一個別名,在后面用到的時候就可以直接用。對于大批量的SQL數據,起到優化的作用。 with子句…

Broad Learning System (BLS) 寬度學習系統

寬度學習(Broad Learning System, BLS)是一種有效的神經網絡學習框架,旨在通過擴展網絡的寬度而不是深度來提高學習能力和效率。與傳統的深度學習相比,寬度學習通過堆疊多層特征節點和增強節點來構建網絡,從而避免了深…

oracle 臨時表

oracle 臨時表 conn scott/tiger --會話內保留行 drop table tmp1; CREATE GLOBAL TEMPORARY TABLE tmp1 ON COMMIT PRESERVE ROWS AS SELECT * FROM emp;SELECT TABLESPACE_NAME,CURRENT_USERS FROM V$SORT_SEGMENT;SELECT * FROM TMP1; INSERT INTO TMP1 SELECT * FROM…

Maven依賴管理項目構建

Maven依賴管理項目構建工具 目錄 文章目錄 Maven依賴管理項目構建工具目錄一、Maven簡介1、為什么學習Maven1.1、Maven是一個依賴管理工具1.2、Maven是一個構建工具1.3、結論 2. Maven介紹3. Maven軟件工作原理模型圖(了解) 二、Maven安裝和配置1. Mave…

PostgreSQL擴展之PGroonga:多語言全文搜索

簡介 PGroonga 是一個 PostgreSQL 擴展,它增加了基于 Groonga 的全文搜索索引方法。雖然原生的 PostgreSQL 支持全文索引,但它僅限于基于字母和數字的語言。PGroonga 提供了更廣泛的字符支持,使其成為 PostgreSQL 支持的語言的超集&#xff…

(實測驗證)Gitee代碼托管嘗試(一)——克隆/下載

一、登錄 Gitee(碼云)代碼托管平臺: Gitee - 基于 Git 的代碼托管和研發協作平臺 新建個人賬戶如下: 二、SSH 公鑰設置 1、在git安裝目錄打開“git-cmd.exe”; 2、通過命令 ssh-keygen 生成 SSH Key: ssh-keygen …

Linux進程概念總結

這里總結下Linux進程概念總結? 馮諾依曼: CPU 運算器與控制器RAM 內存(存儲器)Cache 緩存(一種技術)不屬于馮諾依曼體系結構。ROM 磁盤(輸入輸出設備)磁盤 既可以從硬盤讀取數據也可以向硬盤…

3-3 基于RYU的流量風暴事件原理與響應策略

在傳統網絡中,存在著一定的廣播流量,占據了一部分的網絡帶寬。同時,在有環的拓撲中,如果不運行某些協議,廣播數據還會引起網絡風暴,使網絡癱瘓。 如有以下的一個網絡拓撲結構(3_2_topoplus.py) …

零基礎學Java第十四天之枚舉

枚舉 1、理解 枚舉(Enumeration,通常簡寫為enum)在編程語言中是一種特殊的數據類型,它允許你為變量定義一組命名的常量。這些常量通常表示一組有限的值,比如一周的七天、顏色的集合或者狀態的集合等。枚舉類型的主要目…

es 分詞器(五)之elasticsearch-analysis-jieba 8.7.0

es 分詞器(五)之elasticsearch-analysis-jieba 8.7.0 今天咱們就來講一下es jieba 8.7.0 分詞器的實現,以及8.x其它版本的實現方式,如果想直接使用es 結巴8.x版本,請直接修改pom文件的elasticsearch.version版本號即可…

再談畢業論文設計投機取巧之IVR自動語音服務系統設計(信息與通信工程專業A+其實不難)

目錄 舉個IVR例子格局打開,萬物皆能IVR - 把《民法典》搬上IVR IVR系統其實可鹽可甜。還能可圈可點。 戎馬一生,歸來依然IVR。 舉個IVR例子 以下是IVR系統的一個例子。 當您撥打電話進入IVR系統。 首先檢驗是否為工作時間。 如是,您將被送入…

基于51單片機的自動澆花器電路

一、系統概述 自動澆水灌溉系統設計方案,以AT89C51單片機為控制核心,采用模塊化的設計方法。 組成部分為:5V供電模塊、土壤濕度傳感器模塊、ADC0832模數轉換模塊、水泵控制模塊、按鍵輸入模塊、LCD顯示模塊和聲光報警模塊,結構如…

垃圾分類管理系統java項目

文章目錄 垃圾分類管理系統一、項目演示二、項目介紹三、系統部分功能截圖四、部分代碼展示五、底部獲取項目(9.9¥帶走) 垃圾分類管理系統 一、項目演示 垃圾分類管理系統 二、項目介紹 系統角色:管理員、用戶 1、登錄、注冊功能…

機器人非線性系統反饋線性化與解耦

機器人非線性系統的反饋線性化和解耦是控制理論中的兩個重要概念,它們分別用于簡化系統分析和設計過程,提高控制系統的性能。 首先,反饋線性化是一種將非線性系統轉化為線性系統的技術。在機器人控制中,由于機器人本身是一個強耦…