1. 程式人生 > >C日常程式設計--1

C日常程式設計--1

C日常程式設計——1.scanf&printf

題目

7-13 後天 (5 分) 如果今天是星期三,後天就是星期五;如果今天是星期六,後天就是星期一。我們用數字1到7對應星期一到星期日。給定某一天,請你輸出那天的“後天”是星期幾。

輸入格式: 輸入第一行給出一個正整數D(1 ≤ D ≤ 7),代表星期裡的某一天。

輸出格式: 在一行中輸出D天的後天是星期幾。

輸入樣例: 3 輸出樣例: 5

程式1
#include <stdio.h>
int main(int argc, char **argv) {
    int dd,mm,yyyy;
    scanf("%2d-%2d-%4d"
,&mm,&dd,&yyyy); printf("%04d-%02d-%02d\n",yyyy,mm,dd); return 0; }
結果1
$ cpp main.c -o main.ii
$ cc main.ii -o main
$ ./main
1-2-2014
2014-02-01
Program exited with status 0

結果分析:預設的變數長度不對輸入結果產生影響。

程式2
#include <stdio.h>
int main(int argc, char **argv) {
    int dd,mm,yyyy;
    scanf
("%d-%d-%d",&mm,&dd,&yyyy); printf("%04d-%02d-%02d\n",yyyy,mm,dd); return 0; }
結果2
#include <stdio.h>
int main(int argc, char **argv) {
    int dd,mm,yyyy;
    scanf("%d-%d-%d",&dd,&mm,&yyyy);
    printf("%04d-%02d-%02d\n",yyyy,mm,dd);
    return 0;
}

測試:scanf函式的輸入變數常數長度限制有無對結果的影響 結果:輸入由‘-’判斷變數是否輸入完成,可以不設

程式3
#include <stdio.h>
int main(int argc, char **argv) {
    int a,b;
    scanf("%4d%3d",&a,&b);
    printf("%d\n%d\n",a,b);
    return 0;
}

結果3
$ cpp main.c -o main.ii
$ cc main.ii -o main
$ ./main
123 456
123
456
Program exited with status 0

分析:scanf輸入變數值時設定了變數的長度,則第一個變數達到該長度後則剩下的存入第二個變數

  • ???空格在輸入中算什麼

總結

%[flags][width][.prec][F|N|h|l]type

變數長度----width 用於控制顯示數值的寬度,取值和含義如下: n(n=1,2,3,4,5,6…): 寬度至少為n位,不夠以空格填充。 格式列表中,下一個引數還是width width是一個可選的指定最小值欄位寬度的十進位制數字字串。如果轉換值字元少於欄位寬度,該欄位將從左到右按指定的欄位寬度填充。如果指定了左邊調整選項,欄位將在右邊填充。如果轉換結果寬於欄位寬度,將擴充套件該欄位以包含轉換後的結果。不會發生截斷。然而,小的精度可能導致在右邊發生截斷。

如:%02.1d
表示為0填充,資料長度為2,小數1
scanf("%20s",address);
如果輸入流的內容多於 20 個字元,則下次 scanf() 從此次停止處開始讀入。 
若達到最大域寬前已遇到空白符,則對該域的讀立即停止;此時,scanf() 跳到下一個域。