程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 字符串和格式化輸入輸出(查漏補缺詳細版)---永遠不要認為你很牛,隨便一個知識點就可以難倒你

字符串和格式化輸入輸出(查漏補缺詳細版)---永遠不要認為你很牛,隨便一個知識點就可以難倒你

編輯:C++入門知識

1.strlen()函數和sizeof運算符 代碼舉例: [cpp]  #include <stdio.h>   #include <string.h>      /* provides strlen() prototype */   #define PRAISE "What a super marvelousname!"   int main(void)   {      char name[40];          printf("What's your name?\n");      scanf("%s", name);      printf("Hello, %s. %s\n", name, PRAISE);      printf("Your name of %d letters occupies %d memory cells.\n",           strlen(name), sizeof name);      printf("The phrase of praise has %d letters ",           strlen(PRAISE));      printf("and occupies %d memory cells.\n", sizeof PRAISE);          return 0;   }   交互信息如下: What's your name? Morgan Buttercup Hello, Morgan. What a super marvelous name! Your name of 6 letters occupies 40 memorycells. The phrase of praise has 28 letters andoccupies 29 memory cells. Press any key to continue 知識點: sizeof運算符計算的是數據的大小,strlen()函數計算的是字符串的長度。 name的第七個單元存放空字符,它的存在告訴strlen()在哪裡停止計數。 sizeof對於類型來說括號是必須的。對於具體量是可選的。如下使用 sizeof(char) sizeof(float) sizeof(6.22) sizeof 6.22 sizeof name 2.常量和C預處理器 兩種常量表示法: #define PI 3.14 const float PI 3.14àC90新增的 limits.h中定義的一些常量如下: 符號常量 含義 CHAR_BIT 一個char的位數 CHAR_MAX char類型的最大值 CHAR_MIN char類型的最小值 SCHAR_MAX signed char類型的最大值 SCHAR_MIN signed char類型的最小值 UCHAR_MAX unsigned char類型的最大值 SHRT_MAX short類型的最大值 SHRT_MIN short的最小值 USHRT_MAX short類型的最大值 INT_MAX int類型的最大值 INT_MIN int類型的最小值 UINT_MAX unsigned int類型的最大值 LONG_MAX long類型的最大值 LONG_MIN long類型的最小值 ULONG_MAX unsigned long類型的最大值 LLONG_MAX llong類型的最大值 LLONG_MIN llong類型的最小值 ULLONG_MAX unsigned llong類型的最大值 float.h中定義的一些常量如下: 符號常量 含義 FLT_MANT_DIG float類型的尾數位數 FLT_DIG float類型的最少有效數字位數(十進制) FLT_MIN_10_EXP 帶有全部有效數字的float類型的負指數的最小值(以10為底) FLT_MAX_10_EXP float類型的正指數的最大值 FLT_MIN 保留全部精度的float類型正數的最小值 FLT_MAX float類型正數的最大值 FLT_EPSILON 1.00比1.00大的最小的float類型值之間的差值 代碼舉例: [cpp]   // defines.c -- uses defined constants fromlimit.h and float.   #include <stdio.h>   #include <limits.h>    // integer limits   #include <float.h>     // floating-point limits   int main(void)   {      printf("Some number limits for this system:\n");      printf("Biggest int: %d\n", INT_MAX);      printf("Smallest long long: %lld\n", LLONG_MIN);      printf("One byte = %d bits on this system.\n", CHAR_BIT);      printf("Largest double: %e\n", DBL_MAX);      printf("Smallest normal float: %e\n", FLT_MIN);      printf("float precision = %d digits\n", FLT_DIG);      printf("float epsilon = %e\n", FLT_EPSILON);            getchar();      return 0;   }   輸出結果如下: Some number limits for this system: Biggest int: 2147483647 Smallest long long: -9223372036854775808 One byte = 8 bits on this system. Largest double: 1.797693e+308 Smallest normal float: 1.175494e-038 float precision = 6 digits float epsilon = 1.192093e-007 3.printf()和scanf()函數 首先看幾個知識點: http://blog.csdn.net/wang6279026/article/details/8567828 代碼示例: [cpp]   // floats.c -- some floating-pointcombinations   #include <stdio.h>       int main(void)   {      const double RENT = 3852.99;  //const-style constant          printf("*%f*\n", RENT);      printf("*%e*\n", RENT);      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);          return 0;   }   輸出結果: *3852.990000* *3.852990e+003* *3852.99* *3853.0* * 3852.990* *3.853e+003* *+3852.99* *0003852.99* Press any key to continue 代碼講解:0標志使之產生前導零。 代碼示例: [cpp]  /* flags.c -- illustrates some formattingflags */   #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);          return 0;   }   輸出結果: 1f 1F 0x1f **42** 42**-42** **   6**  006**00006**  006** Press any key to continue 代碼講解:主要是講解空格的使用,說明符中,在正值之前產生一個前導空格,在負值之前不產生前導空格,這樣會使有效位相同的正值和負值以相同字段打印輸出。第三個輸出語句主要說明了,0與.同時出現的時候,0標志將被忽略。 代碼示例: [cpp]   /* strings.c -- string formatting */   #include <stdio.h>   #define BLURB "Authenticimitation!"   int main(void)   {      printf("/%2s/\n", BLURB);      printf("/%24s/\n", BLURB);      printf("/%24.5s/\n", BLURB);      printf("/%-24.5s/\n", BLURB);           return 0;   }   輸出結果: /Authentic imitation!/ /   Authentic imitation!/ /                   Authe/ /Authe                   / Press any key to continue 代碼講解:【.5】告訴printf()函數只打印五個字符。 4.重點:printf()函數格式化輸出之不匹配輸出【補充,原文鏈接:http://blog.csdn.net/wang6279026/article/details/8545706】 代碼示例: [cpp]   /* floatcnv.c -- mismatched floating-pointconversions */   #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);           getchar();            return0;   }   輸出結果【VC】: 3.0e+000 3.0e+000 3.1e+046 0.0e+000 2000000000 1234567890 0 1074266112 0 1074266112 Press any key to continue 輸出結果【DEV】: 3.0e+000 3.0e+000 3.1e+046 2.8e-306 2000000000 1234567890 0 1074266112 0 1074266112 代碼講解: 主要說明第二個輸出語句和第三個輸出語句,printf("%ld %ld %ld %ld\n", n1, n2, n3, n4);該調用告訴計算機把四個變量的值傳遞給計算機,計算機把他們放置到堆棧的一塊內存區域中進行管理。計算機根據變量的類型而不是轉換說明符把這些值放入到堆棧中。所以,分別占用字節為8(float被轉換為了double),8,4,4。然而%d說明符,說明了要取出的字節數是4.所以按照順序取出來就會出錯。因此第二個輸出語句正確,第三個確有問題【當你明白了printf()的運行機制以後,你會更加了解他的方式】 5.打印較長的字符串【三種方式】 [cpp]   printf("Hello, young lovers, whereveryou are.");   printf("Hello, young"        " lovers," " wherever you are.");   printf("Hello, young lovers"            ",wherever you are.");   代碼示例: [cpp]   /* longstrg.c -- printing long strings */   #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 longstring. Press any key to continue 6.printf()和scanf()函數的*修飾符 知識講解: 如果轉換說明符是%*d,那麼參數列表中應該包括一個*的值和一個d的值。該技術也可以和一起使用來指定精度和指定寬度。 代碼示例: [cpp]   /* varwid.c -- uses variable-width outputfield */   #include <stdio.h>   int main(void)   {      unsigned width, precision;      int number = 256;      double weight = 242.5;          printf("What field width?\n");      scanf("%d", &width);  www.2cto.com    printf("The number is :%*d:\n", width, number);      printf("Now enter a width and a precision:\n");      scanf("%d %d", &width, &precision);      printf("Weight = %*.*f\n", width, precision, weight);      printf("Done!\n");            return 0;   }   輸出結果: What field width? 6 The number is :   256: Now enter a width and a precision: 8 3 Weight = 242.500 Done! Press any key to continue 代碼很簡單,估計一看都明白了,我就不多說了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved