一、puts() 函數詳解
puts()函數用來向 標准輸出設備 (屏幕)寫字符串並換行,調用格式為:
puts(s);
其中s為字符串變量(字符串數組名或字符串指針)。
puts()函數的作用與語 printf("%s\n", s) 相同。
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
char s[20], *f;
strcpy(s, "Hello world!"); // 字符串數組變量賦值
f = "Thank you"; // 字符串指針變量賦值
puts(s);
puts(f);
return 0;
}
說明:
(1)puts()函數只能輸出字符串,不能輸出數值或進行格式變換。
(2)可以將字符串直接寫入 puts() 函數中。如:
puts("Hello, Turbo C2.0");
二、fputs() 函數詳解
原型:
int fputs(const char * s,FILE * stream);
功能描述:
將指定的字符串寫入文件流中,不包含字符串結尾符'\0',返回值是字符, 發生錯誤時返回值是EOF,利用它可以 替換文件流中數據,但是不能添加數據。
示例:
#include <stdio.h>
int main(int argc, char **argv)
{
FILE *fp;
char *filename = "/Users/jianbao/ClionProjects/apue/123.txt";
fp = fopen(filename, "r+");
fseek(fp, 3, SEEK_CUR);
fputs("Insert Strings.", fp);
return 0;
}
原文件內容:
1234
Second Line. Second Strings.
修改后文件內容:
123Insert Strings. Second Strings.
可以看出,將原文件中的“\n及Second Line.” 替換為了“Insert Strings.”
三、printf() 函數詳解
printf()函數是式樣化輸出函數, 一般用於向 標准輸出 設備按規定式樣輸出消息。printf()函數的挪用式樣為:
printf("<式樣化字符串>",<參量表>);
其中 式樣化字符串 包括兩部分內容:
一部分是正常字符, 這些字符將按原樣輸出;
另一部分是 式樣化規定字符, 以"%"開端,后跟一個或幾個規定字符,用來確定輸出內容式樣。
參量表是需求輸出的一系列參數, 其個數務必與式樣化字符串所闡明的輸出參數個數一樣多, 各參數之間用","分開, 且順序逐一對應, 不然將會出現意想不到的過失。
式樣化字符串的式樣是:
%[標志][輸出最小寬度][.精度][長度]式樣字符
1、標志:
標志 意義
- 結果左對齊,右邊填空格
+ 輸出標記(正號或負號)
空格 輸出值為正時輸出空格,為負時輸出負號
# 正在八進制和十六進制線顯現前導航O,Ox
假如你還不太理解,沒關系!請瞧下面的例子就會了如指掌了:
例1:
#include <stdio.h>
int main(int argc, char **argv)
{
int a = 100;
float b = 123.255;
printf("(1)a=%d\n", a); // \n為轉義字符,控制換行
printf("(2)a=%10d\n", a);
printf("(3)a=%-10d\n", a);
printf("(4)a=%+d\n", a);
printf("(5)a=% d\n", a);
printf("(6)a=%#o\n", a); // 8進制
printf("(7)a=%#x\n", a); // 16進制
printf("(8)b=%lf\n", b); // 能否對此行的輸出存有疑問,這都是float精度惹的禍,賣前就曉得如何對其變動了
return 0;
}
輸出:
(1)a=100
(2)a= 100
(3)a=100
(4)a=+100
(5)a= 100
(6)a=0144
(7)a=0x64
(8)b=123.254997
2、輸出最小寬度:
(1) 用十進制整數來表示輸出的最少位數。(至多要輸出這么多位!)
(2) 若實際位數多於界說的寬度:則按實際位數輸出。
(3) 若實際位數少於界說的寬度:a.則右對齊,左邊留空。
b.有負號,左對齊,右邊留空
c.表示寬度的數字以0開端,則右對齊,左邊留空。
我們再來瞧一個例子:
#include <stdio.h>
int main(int argc, char **argv)
{
int a = 3456;
printf("(1)a=%3d\n", a); // 若實際位數多於界說的寬度:則按實際位數輸出
printf("(2)a=%10d\n", a); // 若實際位數少於界說的寬度:則右對齊,左邊留空
printf("(3)a=%-10d\n", a); // 若實際位數少於界說的寬度:有負號,左對齊,右邊留空
printf("(4)a=%010d\n", a); // 若實際位數少於界說的寬度:表示寬度的數字以0開端,則右對齊,左邊留空
printf("(5)a=%-010d\n", a); // 左對齊,0無意義。
return 0;
}
輸出:
(1)a=3456
(2)a= 3456
(3)a=3456
(4)a=0000003456
(5)a=3456
3、精度:
精度式樣符以“.”開頭,后跟十進制整數。意義是:
假如輸出數字,則表示小數的位數;若實際位數大於所界說的精度數,則四舍五進。若不敷則補0;
假如輸出的是字符,則表示輸出字符的個數;若實際位數大於所界說的精度數,則截走超出的部分。
例3:
#include <stdio.h>
int main(int argc, char **argv)
{
printf("(1)%.3f\n", 12.3456);
printf("(2)%.9f\n", 12.3456);
printf("(3)%.3s\n", "abcdefg");
printf("(4)%.9s\n", "abcdefg");
return 0;
}
輸出:
(1)12.346
(2)12.345600000
(3)abc
(4)abcdefg
所以對 例1 中的 printf("b=%lf", b) 只需改為 printf("b=%.2lf", b) 就可以對結果進行2位小數的保存了!
4、長度:
長度式樣符為 h,l 兩種,h表示按短整型量輸出,l表示按長整型量輸出。
5、式樣字符:
式樣 意義
————————————————————————————
d: - 以十進制方式輸出帶標記整數(正數不輸出標記);
u: - 以十進制方式輸出無標記整數;
f: - 以小數方式輸出單、雙精度實數;
e: - 以質數方式輸出單、雙精度實數;
g: - 以%f,%e中較短的輸出寬度輸出單、雙精度實數;
c: - 輸出單個字符;
s: - 輸出字符串。
————————————————————————————
注:l正在d,o,x,u,前,指的輸出精度為long型;正在e,f,g前,指定輸出精度為double型
最后還是講些 轉義字符 吧:
轉義字符是C言語中表示字符的一種非凡方式。一般使用轉義字符表示ASCII字符集中不可打印的控制字符和特定功能的字符,如用於表示字符常量的單撇號('),用於表示字符串常量的雙撇號(")和反斜杠(/)等。轉義字符用反斜杠/后面跟一個字符或一個八進制或十六進制數表示。
轉義字符 意義 ASCII值(十進制)
\a 響鈴(BEL) 007
\b 退格(BS) 008
\f 換頁(FF) 012
\n 換行(LF) 010
\r 回車(CR) 013
\t 程度制表(HT) 009
\v 筆挺制表(VT) 011
\/ 反斜杠 092
\? 問號字符 063
\' 單引號字符 039
\" 雙引號字符 034
\0 空字符(NULL) 000
\ddd 恣意字符 三位八進制
\xhh 恣意字符 二位十六進制
字符常量中使用單引號和反斜杠以及字符常量中使用雙引號和反斜杠時,都務必使用轉義字符表示,即正在這些字符前加上反斜杠。
正在C步驟中使用轉義字符\ddd或者\xhh可以方便靈便地表示恣意字符。\ddd為斜杠后面跟三位八進制數,該三位八進制數的值即為對應的八進制ASCII值。\x后面跟兩位十六進制數,該兩位十六進制數為對應字符的十六進制ASCII值。
使用轉義字符時需求注重以下標題:
(1) 轉義字符中只能使用小寫字母,每個轉義字符只能瞧作一個字符。
(2) \v 筆挺制表和\f 換頁符對屏幕沒有任何影響,但會影響打印機施行呼應作。
(3) 正在C步驟中,使用不可打印字符時,一般用轉義字符表示。
