112.C語言_輸入輸出

第三章 輸入輸出node

  • 3.1輸入輸出概念及其實現
    • (1)數據從計算機內部向外部輸出設備(如顯示器、打印機等)輸送的操做稱爲 「輸出」,數據從計算機外部向輸入設備(如鍵盤、鼠標、掃描儀等)送入的操做稱爲 「輸入」。
    • (2)C語言自己不提供輸入輸出語句,能夠經過函數來實現輸入和輸出的操做。
    • (3)在使用C語言庫函數時,首先要用預編譯命令 「 #include」將有關的「頭文件」包含到用戶源文件中。
  • 3.2單個字符的輸入輸出#include <stdio.h>
    • 3.2.1字符輸出函數putchar()
      • putchar()函數的做用是向終端輸出一個字符。
        • 如:
        • putchar(a);
        • 它輸出字符變量a的值,a也能夠是字符型變量或整型變量。若a是整型變量,則輸出的是ASCII碼值爲該變量值的那個字符。
    • 3.2.2字符輸入函數getchar()
      • getchar()函數的做用是從終端輸入一個字符,getchar()函數沒有參數,函數值就是從輸入設備獲得的字符。
      • getchar()只能接收一個字符,getchar()函數獲得的字符能夠賦給一個字符變量或整型變量,也能夠不賦給任何變量,做爲表達式的一部分。若是在一個函數中(今爲main()函數)要調用getchar()和putchar()函數,在該主函數以前的包含命令「#include <stdio.h>「是必不可少的。
  • 3.3數據格式的輸入與輸出
    • 3.3.1 printf()函數
      • 定義
        • printf()函數是C語言提供的標準輸出函數,它的做用是向終端(或系統隱含指定的輸出設備)按指定格式輸出若干個數據。遇到控制字符,按照控制字符的規定輸出,遇到非格式字符串按原樣輸出。
      • 通常形式:
        • printf(「格式控制字符串」,輸出列表);
          • 如:
            • printf(「%f,%d」,x,y);
      • printf是函數名,括號內由如下兩部分組成:
        • (1)「格式控制」:
          • 用雙引號括起來的字符串是「格式控制」字符串,它包括兩種信息。
            • ① 格式轉換說明,由「%」和格式字符組成,如 %d、%s等。上例中,當輸出項爲int 型時,系統規定用d做爲格式描述字符,所以,有「%d」。當輸出項爲float或double類型時,用f或e做爲格式描述字符。格式描述符要與輸出項一一對應且類型匹配。
              • %[flags] [width] [.prec] [hlL] type
              • 格式字符
                • 能夠根據須要在「%」與格式字符之間插入「寬度說明」、左對齊符號「-」、前導零符號「0」等。
                  • (1)d格式符,用來對十進制數進行輸入輸出,其中「%d」按整型數據的實際長度輸出,「%md」指定m爲輸出字段所佔的寬度。
                  • (2)o格式符,以八進制數形式輸出整數,一樣能夠經過如「%8o」的格式指定輸出時所佔的寬度。
                  • (3)x格式符,以十六進制數形式輸出整數,一樣能夠經過如「%12x」的格式指定輸出時所佔的寬度。
                  • (4)u格式符,用來輸出 unsigned 型數據,即輸出無符號的十進制數。
                  • (5)c格式符,用來輸出一個字符。
                  • (6)s格式符,用來輸出一個字符串。
                  • (7)f格式符,用來輸出實數(包括單、雙精度),以小數形式輸出,使整數部分所有如數輸出。
                  • (8)e格式符,以指數形式輸出實數。
                  • (9)g格式符,用來輸出實數。
                • 對於f、e、g格式符能夠用「整型數1.整型數2「的形式,在指定寬度的同時來指定小數位的位數,其中,「整型數1」用來指定輸出數據所佔的總寬度,「整型數2」用來肯定精度。精度對於不一樣的格式符有着不一樣的含義。當輸出位數多於「整型數2」指定的寬度時,截去右邊多餘的小數,並對截去的第一位小數作四捨五入處理。當輸出數據的小數位數少於「整型數2」指定的寬度時,在小數的最右邊添0,當輸出的數據所佔的寬度大於「整型數1」指定的寬度時,小數位仍按上述規則處理,整數部分並不丟失。也能夠用「.整型數2」的形式來指定小數位數,這時輸出的數據所佔寬度由系統決定。一般,系統對float類型提供7位有效位數,對於double類型提供15位有效位數。
            • ② 須要原樣輸出的字符(一般指除了格式說明與一些轉義字符外的那部分)也寫在格式控制內。
        • (2)「輸出表列」是須要輸出的一些數據,能夠是常量、變量或表達式。例如:
          • printf(「x=%dy=%d」,x,y);
          • 其中,「x=%dy=%d」是格式說明 ; x,y是 輸出表列。輸出表列中的各輸出項要用逗號隔開。若x,y的值爲7,8 ,以上兩條輸出結果爲:x=7y=8 在兩數之間有空格,由於在兩個格式說明符中間有一個空格。
      • 使用printf()函數時的注意事項
        • (1)在格式控制字符串中,格式說明與輸出項從左到右在類型上必須一一對應匹配,如不匹配將致使數據輸出出現錯誤,如在輸出long型數據時,必定要用%ld格式控制,而不能用%d格式控制。
        • (2)在格式控制串中,格式說明與輸出項的個數也要相等,如格式說明的個數多於輸出項的個數,則對於多餘的格式將輸出不定值(或0值)。
        • (3)在格式控制串中,除了合法的格式說明外,能夠包含任意的合法字符(包括轉義字符),這些字符在輸出時將被「原樣輸出」。
        • (4)若是要輸出 「%「,則應該在格式控制串中用兩個連續的百分號「%%」來表示。
    • 3.3.2 scanf()函數
      • scanf()函數的通常形式
        • scanf(「格式控制字符串」,地址表列);
        • 若格式控制字符串中有非格式字符串,則按原樣輸入。A=%d,b=%c若格式控制字符串中沒有非格式字符,做輸入數據之間的間隔,則可用空格、Tab、回車做間隔。%d%c
        • 在輸入字符數據時,若格式控制字符串中無非格式字符,則認爲全部輸入的字符均爲有效字符。空格會被看成字符賦值給變量。
      • 其中scanf是函數名,「格式控制「的含義同printf( )函數, 「地址表列「由若干個變量地址組成,既能夠是變量的地址,也能夠是字符串的首地址(參見「字符數組「一節)。
        • 例如:
          • scanf(「%d」,&a);
          • printf(「%d」,a);
          • 運行時輸入123,按回車鍵後則會在屏幕上輸出整型變量a的值123 。其中「%d」是格式控制字符串。 &a 是輸入項。其中的「&」是「取地址運算符」,&a指a在內存中的地址,如須要有多個輸入項時,輸入項之間要用逗號隔開。在實際輸入時,若一次向計算機輸入多個數據,則每兩個數據間要以一個或多個空格間隔,也能夠用回車鍵或跳格鍵【Tab】。
        • 格式說明
          • scanf()函數中的格式說明也是以%開始,以一個格式字符結束,中間能夠加入附加的字符。
          • (1)對unsigned型變量的數據,能夠用 %d、%o、%x格式輸入。
          • (2)在scanf( )函數中格式字符前能夠用一個整數指定輸入數據所佔寬度,但對於實型數則不能指定其小數位的寬度。
          • (3)在格式控制串中,格式說明的個數應該與輸入項的個數相等,且要類型匹配,如不匹配,系統也不會給出出錯信息,但有可能使程序的結果不正確。若格式說明的個數少於輸入項的個數,scanf( )函數結束輸入,多餘的項繼續從終端接收新的數據,若格式說明的個數多於輸入項個數時,scanf( )函數一樣也結束輸入。
      • 使用scanf()函數時應注意的問題
        • (1)scanf()函數中的輸入項只能是地址表達式,而不能是變量名或其餘內容,也就是說輸入項必須是某個存儲單元的地址,這一點必定要掌握。
          • 例如:
            • int m,n;
            • scanf(「%d,%d」,m,n);
            • 是不對的,應將其中的「m,n「改成 「&m,&n」。
        • (2)若是在「格式控制「字串中除了格式說明之外還有其餘字符,則在輸入數據時應輸入與這些字符相同的字符。
        • (3)在用 「%c」格式輸入字符時,空格字符和轉義字符都做爲有效字符輸入。
        • (4)在輸入數據時,若實際輸入數據少於輸入項個數,scanf( )函數會等待輸入,直到知足條件或遇到非法字符才結束;若實際輸入數據多於輸入項個數,多餘的數據將留在緩衝區備用,做爲下一次輸入操做的數據。
        • (5)scanf( )函數中的格式控制串是爲輸入數據用的,其間的字符不能實現原樣輸出。若想在輸入時出現提示性語言,則須要另外使用printf語句
        • (6)在輸入數據時,遇到如下狀況時認爲輸入結束
          • 空格、按「回車」或「跳格」(【Tab】)鍵,上述字符統一可稱爲「間隔符」。
          • 在程序運行到要求實際輸入時,間隔符的數目不限,按指定的寬度結束,如「%3d」,只取3列。
  • 3.4 字符串的輸入輸出
    • 3.3.1字符串的輸出方法
      • (1)用printf函數
        • 用printf輸出字符串時,要用格式符「%s」,輸出時從數組的第一個字符開始逐個字符輸出,直到遇到第一個‘\0’爲止。
        • 例:      
          • char st[15]=「I  am a  boy!」
          • printf(「st=%s,%c,%c」,st,st[3],st[7]);
          • 輸出結果:st=Iam a boy!mb
      • (2)用puts函數輸出字符串
        • 函數原型:intputs(char * str);
        • 調用格式:puts(str);
        • 函數功能:將字符數組str中包含的字符串或str所指示的字符串輸出,同時將'\0'轉換成換行符。
        • 例:
          • charch[]="student";
          • puts(ch);  puts("Hello");
        • 將字符數組中包含的字符串輸出,而後再輸出一個換行符。所以,用puts()輸出一行,沒必要另加換行符'\n'。
      • 函數puts每次只能輸出一個字符串,而printf能夠輸出幾個:printf("%s%s",str1,str2);
    • 3.3.2字符串的輸入
      • (1)使用scanf函數輸入字符串
        • 例:
          • char  st[15];
          • scanf(「%s」,st);
          • 但:scanf(「%s」,&st);是錯誤的,由於st就表明了該字符數組的首地址。
        • 注:輸入時,以回車或空格做爲結束標誌;
          • 即:用scanf輸入的字符串中不能含有空格。
              • 若按以下方法輸入:
              • How do  you  do?↙
              • 執行語句:     scanf("%s",st)  ;  則s 的內容爲: How\0
              • 使用格式字符串"%s"時會自動加上結束標誌'\0'。第一個空格後的字符沒有輸入st中。
      • (2)使用函數gets()輸入字符
        • 函數原型:char   *gets(char *str);
        • 調用格式:gets(str);   str是一個字符數組或指針。
        • 函數功能:從鍵盤讀入一個字符串到str中,並自動在末尾加字符串結束標誌符’\0’。
        • 輸入字符串時以回車結束輸入,這種方式能夠讀入含空格符的字符串
          • 如:
            • char s[14];
            • gets(s);
            • 若輸入的字符串爲: How do you do?↙
            • 則s 的內容爲:   How do you do?\0
        • 例:字符串輸入輸出示例
          • #include<stdio.h>
          • main()
          • {chars[20],s1[20];
          • scanf(「%s」,s);
          • printf(「%s\n」,s);
          • scanf(「%s%s」,s,s1);
          • printf(「s=%s,s1=%s」,s,s1);
          • puts(「\n」);
          • gets(s);   puts(s);
          • }
          • 程序運行過程:
          • How doyou do?↙
          • How
          • How doyou do?↙
          • s=How,s1=do
          • How doyou do?↙
          • How do you do?
        • 注意:
          • 1.輸出字符不包括‘\0’.
          • 2.用「%s」格式符輸出字符串時,printf函數中的輸出項是字符數組名,而不是元素數組名。
          • 3.若是數組長度大於字符串實際長度,他只輸出到遇到‘\0’結束。Char c[10]={「china」};
          • printf(「%s\n」,c);輸出china
          • 4.若是一個字符數組中包含兩個以上‘\0’,則遇到第一個 時就結束輸出。
          • 5.scanf中寫字符數組名,不要再加地址符。
          • 6.scanf 和  gets的數據:
            • 若是輸入的是  good good  study!
            • 那麼scanf(「%s」,a); 只會接收  good.
            • 考點:不能夠接收空格。
            • gets(a); 會接收  good good study!
            • 考點:能夠接收空格。
  • 3.5 字符數組的輸入輸出
    • 字符數組的輸入輸出能夠有如下兩種方法:
      • (1)用「%c「格式符將字符逐個輸入或輸出。
      • (2)用「%s「格式符,將整個字符串一次輸入或輸出。
        • 例如:
        • char c[]= 「program「;
        • printf(「%s「,c);
    • 用格式符「%s「輸出字符串時,printf()函數中的輸出項應該是數組名,而不是數組中的某個元素,如「printf(「%s「,c[0]);「是不對的,應改成「printf(「%s「,c);「。當數組中的字符串的實際長度小於數組定義的實際長度時,在輸出時也是遇到'\0'就結束;當數組中有多個'\0'時,遇到第一個'\0'就結束輸出。結束符'\0'不被輸出。在使用scanf()函數中,輸入項是字符數組名。輸入項爲字符數組名時,不用再加取地址符「&「。由於在C語言中數組名錶明該數組的起始地址,如「scanf(「%s「,str);「。

 

 

 

 

相關文章
相關標籤/搜索