C 控制臺輸入

2018-05-19 15:33 更新

學(xué)習(xí)C - C控制臺輸入

輸入格式控制字符串

下表列出了scanf函數(shù)的轉(zhuǎn)換字符及其含義。

轉(zhuǎn)換字符含義
d將輸入讀取為帶符號的十進(jìn)制整數(shù)。
i將輸入讀取為有符號整數(shù)。如果輸入從0開始,則輸入被假定為八進(jìn)制。如果輸入以0x或0X開始,則假設(shè)為十六進(jìn)制輸入;否則為十進(jìn)制輸入。
o讀取輸入,假設(shè)它是一個(gè)帶符號的八進(jìn)制整數(shù)。
u將輸入讀取為無符號整數(shù)。
x將輸入讀取為帶符號的十六進(jìn)制整數(shù)。
c讀取字段寬度指定的字符數(shù)為類型char,包括空格。如果字段寬度規(guī)范不存在,將讀取一個(gè)字符。要忽略前面的空格,請?jiān)诟袷揭?guī)范之前加一個(gè)空白字符。
s讀取一串連續(xù)的非空白字符作為類型char,從下一個(gè)非空白字符開始。
[]從方括號中的指定集中讀取字符。集合中沒有找到的第一個(gè)字符結(jié)束輸入。%[] ab]讀取字符,只要它們是a,b或。只要不是a,b或],%[^] ab]讀取字符。
a,A,e,E,f,F(xiàn),G 或 g將輸入轉(zhuǎn)換為float類型。輸入中的符號,小數(shù)點(diǎn)和指數(shù)是可選的。
%讀取一個(gè)%字符。跳過%字符是%%。
p讀取輸入作為指針。參數(shù)應(yīng)為void **類型。
n沒有讀取輸入,但從鍵盤讀取的字符數(shù)存儲在參數(shù)中。

下表列出了轉(zhuǎn)換規(guī)格中的選項(xiàng)示例。

規(guī)范描述
%lf讀取下一個(gè)值作為double類型。
%*d讀取下一個(gè)整數(shù)值,但不要存儲它。
%15c讀取接下來的15個(gè)字符作為類型char。
\n%c讀取下一個(gè)字符為類型char忽略空格字符。
%10lld讀取接下來的十個(gè)字符作為long long類型的整數(shù)值。
%Lf讀取下一個(gè)值作為long double類型的浮點(diǎn)值。
%hu讀取下一個(gè)值作為無符號短類型。

    #include <stdio.h> 

    int main(void) { 
      int i = 0; 
      int j = 0; 
      int value_count = 0; 
      float fp1 = 0.0f; 
      printf("Enter: fp1 = 3.1 i = 7 8\n"); 
      
      printf("\nInput:"); 
      value_count = scanf("fp1 = %f i = %d %d", &fp1, &i , &j); 
      printf("\nOutput:\n"); 
      printf("Count of values read = %d\n", value_count); 
      printf("fp1 = %f\ti = %d\tj = %d\n", fp1, i, j); 
      return 0; 
    } 

上面的代碼生成以下結(jié)果。

浮點(diǎn)輸入的變化


#include <stdio.h> 

int main(void) 
{ 
  float fp1 = 0.0f; 
  float fp2 = 0.0f; 
  float fp3 = 0.0f; 
  int value_count = 0; 
  printf("Enter: 3.14.314E1.0314e+02\n"); 
  
  printf("Input:\n"); 
  value_count = scanf("%f %f %f", &fp1, &fp2, &fp3); 
  
  printf("\nOutput:\n"); 
  printf("Number of values read = %d\n", value_count); 
  printf("fp1 = %f  fp2 = %f  fp3 = %f\n", fp1, fp2, fp3); 
  return 0; 
} 

上面的代碼生成以下結(jié)果。

讀取十六進(jìn)制和八進(jìn)制值

我們可以使用格式說明符%x從輸入流讀取十六進(jìn)制值。

對于八進(jìn)制值,您使用%o。


    #include <stdio.h> 

    int main(void) { 
      int i = 0; 
      int j = 0; 
      int k = 0; 
      int n = 0; 
      
      printf("Enter three integer values:"); 
      n = scanf(" %d %x %o", &i , &j, &k ); 
      
      printf("\nOutput:\n"); 
      printf("%d values read.\n", n); 
      printf("i = %d   j = %d   k = %d\n", i, j, k ); 
      return 0; 
    } 

上面的代碼生成以下結(jié)果。

使用scanf()讀取字符

您可以使用格式說明符%c讀取單個(gè)字符并將其存儲為類型char。

要讀取一串字符,您可以使用說明符%s或說明符%[]。

%[aeiou]將讀取僅由元音組成的字符串。

不是元音的第一個(gè)字符將表示字符串的末尾。

%[^ aeiou]讀取一個(gè)字符串,其中包含不是元音的任何字符。

第一個(gè)元音或空格字符將表示字符串的末尾。

%[]規(guī)范使您能夠讀取一個(gè)包含空格的字符串,并且%s規(guī)范不能這樣做。

您只需要將一個(gè)空格作為方括號之間的字符之一。


    #include <stdio.h> 

    int main(void){ 
      char initial = " "; 
      char name[80] = { " " }; 
      char age[4] = { "0" }; 
      printf("Enter your first initial: "); 
      scanf("%c", &initial, sizeof(initial)); 
      printf("Enter your first name: " ); 
      scanf("%s", name, sizeof(name)); 
      fflush(stdin); 
      
      if(initial  != name[0]) 
        printf("%s,you got your initial wrong.\n", name); 
      else 
        printf("Hi, %s. Your initial is correct. Well done!\n", name ); 
      
      printf("Enter your name and age separated by a comma:\n" ); 
      scanf_s("%[^,] , %[0123456789]", name, sizeof(name), age, sizeof(age)); 
      printf("\name is %s is %s years old.\n", name, age ); 
      return 0; 
    } 

上面的代碼生成以下結(jié)果。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號