字串和輸入輸出

2021-07-25 14:45:35 字數 3423 閱讀 2302

一.示例程式

#include

#include

#define density 62.4

int main()

該程式的新特性:

1.使用乙個陣列來存放字串,可以存放40個位元組,每個位元組都可以存放乙個字元值。

2.使用%s轉換說明符來處理字串輸入和輸出。

3.使用預處理器定義

4.使用strlen()這個函式來獲取字串長度。

二.字串入門

1.字串的定義

字串是乙個或者多個字元的序列。

c語言沒有專門為字串定義變數型別,而是把他們都存放在char陣列中,每個字元占用乙個單元。字串的最後乙個位置顯示

字元\0,是空字元,其ascii碼的值位0,c用它來標記字串的結束。

2.使用字串

#include

#define praise "what a super marvelous name!"

int main(void)

scanf()只讀取了*** xx中的***。scanf()開始讀取輸入以後,會在遇到第乙個空白字元空格(blank),制符表(tab)或者換

行符(newline)處停止讀取。

3.使用strlen()函式

#include

#include

#define praise "what a super marvelous name!"

int main(void)

size(xx)和size xx的區別在於是獲取乙個型別的大小還是某個具體量的大小。()對於型別是必選的,但是對於具體的量是可

選的,也就是說必需使用sizeof(char)或者sizeof(float),但是可以選擇sizeof name或者 sizeof 6.28.

三.常量和預處理器

格式:#define name value

name一般是用大寫,立即知道是乙個常量而不是乙個變數,使程式更容易閱讀。

#include

#define pi 3.14159

int main(void)

define也可以用於定義字元和字串常量

#define beef 't'

#define pop "tran"

c90新增的建立常量的方法為const,即使用關鍵字const把乙個變數宣告轉換為常量宣告

例如 const int months=12;

這樣就使months變成了乙個唯讀值,只能讀取其值但是不能改變他的值。

c的標頭檔案limits.h和float.h分別提供了有關整數型別和浮點型別的大小限制的詳細資訊,該檔案提供了整數型別的最大值和

最小值得常量定義

#include

#include

#include

int main(void)

四.深入printf()和scanf()

1.printf()函式

#include

#define pi 3.141593

int main(void)

控制字串語句應該為每個要列印的專案包含乙個轉換說明符(即要一一對應)。如果要單獨列印%字元,需要輸入%%。

2.printf()函式的轉換說明修飾符

#include

#define pages 931

int main(void)

第乙個轉換說明符是不帶修飾符的%d,生成乙個與列印整數寬度相同的字段。

第二個轉換說明符是%2d,它指示應該產生寬度為2的字段。

第三個轉換說明符是%10d,產生乙個10個空格寬的字段,並且數字位於整個欄位的後面。

第四個轉換說明符是%-10d,產生乙個10個空格寬的字段,不過數字位於整個欄位的前面。

#include

int main(void)

%f預設格式有兩個:字段寬度和小數點右邊的數字的數目。

%e預設格式為小數點左側列印乙個數字,小數點右側列印6個數字。

+標誌使得結果數字和它的代數符號一起列印,0標誌產生前導零以使結果填充整個字段。在說明符%010中第乙個0第乙個標誌,

剩餘的數字指定字段寬度。

#include

int main(void)

第二行示範了如何在說明符中使用空格以在正值之前產生乙個前導空格。

第三行說明如何在整數格式中使用精度說明符來產生足夠的前導零以填滿要求的最小數字位數。

#include

#define blurb "authentic imitation!"

int main(void)

3.轉換說明的意義

它把儲存在計算機中的二進位制格式的數值轉換成一系列字元以便於顯示。

不匹配轉換會導致很多問題,例如一下兩個:

#include

#define pages 336

#define words 65618

int main(void)

#include

int main(void)

4.printf()的返回值

#include

int main(void)

首先程式使用rv=printf()將返回值賦給了rv,因此後面一條語句將輸出前一條printf()語句的值。

5.列印較長的字串

#include

int main(void)

方法一是使用多個printf()語句。

方法二是使用反斜線符號/和回合鍵的組合來結束第一行。(注意縮排)

方法三是採用字串連線的方法

6.scanf()的使用

#include

int main(void)

scanf()使用換行,製表符和空格來決定怎麼樣把輸入分成幾個字段。它依次把轉換說明與字段想匹配,並跳過它們之間的空格

。從工作原理上看,假如使用乙個%d來讀取乙個整數,它期望發現乙個數字字元或者乙個符號,若發現那它就儲存並且讀取下一

個字元,這樣scanf()就持續讀取和儲存字元直到它遇到乙個非數字字元。若果遇到乙個非數字字元,則返回前乙個字元並且把

之前的全部輸入如果第乙個非空字元不是數字而是字母a,則他會一直讀取a而不會越過他。

使用%s說明符,那麼空白字元之外的所有字元都是可以接受的。

如果使用%c說明符,那麼所有的輸入字元都是平等的。如果下乙個輸入字元是乙個空格或者換行符,將會把這個空格或換行符

賦給指定的變數,不會跳過空白字元。

7.scanf()和printf()的*修飾符

#include

int main(void)

如果事先不像指定字段寬度,而希望有程式指定該值,那麼可以在字段寬度部分用*代替數字來達到目的,但必須使用乙個引數

來告訴函式欄位的寬度。

#include

int main(void)

在scanf()中*提供截然不同的服務。當把它放在%和說明符字母之間時,它使函式跳過相應的輸入專案。

字串輸入輸出函式

while gets name null 可檢查檔案是否結尾 while ch getchar eof gets 讀取換行符並將其丟棄,fgets 把換行符存字串裡,但每次顯示字串會顯示換行符 不足之處 fgets 是為檔案i o而設計得,在處理鍵盤輸入時就不如gets 那麼方便。它需要第二個引數來...

字串輸入輸出函式

字串輸入首先要考慮的是儲存位置和儲存空間大小。例子 char name scanf s name 指標未初始化,可能指向記憶體中的任意地方,字串讀入的時候有可能覆蓋記憶體中的關鍵資料,造成程式或機器崩潰。char name 81 這種方式顯式宣告空間並進行初始化。scanf s str 函式讀入單個...

PAT c 字串輸入輸出

printf s 1f 8.0 5.0 lf 保留一位小數 有小數點 printf s lf 8.0 5.0 lf 輸出浮點數 include include include include include using namespace std intmain cout ans endl retu...