1. printf()的返回值為其輸出字符串常量的字符數(注意字符數與字數的區別)注意計數針對所有的打印字符,包括空格和不可見的換行字符(不包括字符串的空字符)。
  2. scanf()函數返回成功讀入的項目的個數。即在下面程序中scanf的返回值為1。如果沒有讀取任何項目(如它期望一個數字但是出入了一個非數字字符),它會返回值0。當它檢測到“文件結尾”時,它返回EOF(EOF是文件stdio.h中定義的特殊值。一般,#define 指令把EOF 的值定義為 -1)。  
1.   int n;
    float  p;
    n= scanf("%f",&p);
    printf("%d,%f",n,p);

用%c讀入空格和字符的問題。

如果在格式字符串中%c之前有一個空格,那麼scanf()會跳到第一個非空白字符處。也就是説,命令scanf(“%c”,&ch)讀取在輸入中遇到的第一個字符,而scanf(“ %c”,&ch)(%c前有個空格)則讀取遇到的第一個非空白字符。


printf()函數的*修飾符(*滯後賦值,例:%*d)

 

  假定不想事先制定字段寬度,而是希望由程序來指定該值,可以在字段寬度部分使用*來代替數字來達到目的,但是也必須使用一個參數來告訴函數字段寬度應該是什麼。也就是説,如果轉換説明符是%*d ,那麼參數列表中應該包括一個 * 值和一個 d 的值。同時這種方式也可以和浮點數一起使用來指定精度和字段寬度。

例:

 

printf("What field width?\n");
        scanf("%d", &width);
        printf("The number is: %*d:\n", width, num);
        printf("Enter a width and a precision:\n");
        scanf("%d %d", &width, &precision);
        printf("Weight = %*.*f\n", width, precision, weight);

結果:

What field width?7
The number is:     256:
Enter a width and a precision:
3 7
Weight = 123.4500000


  scanf()函數的*修飾符

 

在scanf()函數中,當把 * 放在 % 和説明符字母之間時,它使函數跳過相應的輸入項目。

例:

int i,j;
    scanf("%d%*d%d",&i,&j);
    printf("%d,%d\n",i,j);

輸出結果為:

2 3 5
i=2,j=5

/*
     通過while循環把上面 i 輸入後的多的垃圾字符跳過
     如果沒有while循環,在調試時輸入 i = 123asdfg
     在Vc++6.0中的輸出結果為:
     123asdfg
     i = 123
     j = -858993460
     */
    int scan1,scan2;
    char ch;
    scanf("%d", &scan1);
    printf("scan1= %d\n", scan1);
    while ( (ch=getchar()) != '\n')
        continue;
    scanf("%d", &scan2);
    printf("scan2 = %d\n", scan2);

參數傳遞的原理

 

float n1 = 3.0;double n2 = 3.0;long n3 = 2000000000;long n4 = 1234567890;printf("%ld, %ld, %ld, %ld\n", n1, n2, n3, n4);

結果為:

2000000000, 1234567890, 3, 64

  該調用告訴計算機把變量n1、n2、n3、n4的值傳遞給計算機,計算機把它們放置到被稱為堆棧(stack)的一塊內存區域中來實現。計算機根據變量的類型而非轉換説明符把這些值放到堆棧中。所以,n1 在堆棧中佔用8個字節(float 被轉換成 double)。同樣,n2 也佔用8個字節,而n3 和n4 則分別佔用4個字節。然後控制轉移到 printf()函數。該函數從堆棧把值讀出來,但是在讀出時,它根據轉換説明符去讀。 %ld 説明符指出, printf() 應該讀取4個字節,所以 printf()在堆棧中讀取前4個字節作為它的第一個值。這就是n1的前半部分,它被解釋成一個長整數。下一個 %ld説明符再讀取4個字節,這就是n1 的後半部分,它被解釋成第二個長整數。同樣,%ld 的第三個和第四個實例使得 n2 的前半部分和後半部分被讀出,並被解釋成2個長整數。