在寫指標陣列題目時,遇到數字轉換問題。
問題如下:
將大於0小於1000的阿拉伯數字轉換為羅馬數字。
表示個位數:i,ii,iii,iv,v,vi,vii,viii,ix
表示十位數:x,xx,***,xl,l,lx,lxx,l***,xc
表示百位數:c,cc,ccc,cd,d,dc,dcc,dccc,cm
我選擇了查表法。
第一次(錯誤的)**如下:
#includeint main()
;//將羅馬數字儲存在字串陣列裡。
int n, t;
while (scanf("%d", &n) > 0)
printf("\n");
}}
編譯器可以正常執行但一直在警告。
[warning] deprecated conversion from string constant to 『char*』 [-wwrite-strings]
//警告:不推薦從字串常量轉換為』char '[-wwrite-strings]
為什麼呢?
經過查閱資料,我了解到原來char *背後的含義是:給我個字串,我要修改它。
而理論上,我們傳給函式的字面常量是沒法被修改的。
所以說,比較合理的辦法是把引數型別修改為const char *。
這個型別說背後的含義是:給我個字串,我只要讀取它。
第二次(錯誤的)**如下:
#includeint main()
;//將羅馬數字儲存在字串陣列裡。
int n, t;
while (scanf("%d", &n) > 0)
printf("\n");
}}
經過測試得到以下資料
1cxi
9cxix
10cxx
11cxxi
99cix
100ccx
150cclx
999(null)ix
一開始看到這串資料,我整個人都炸了。
經過多次推理,我堅信我解題的邏輯並沒有問題
但我鍥而不捨地測試以及學長的幫助下後,**終於崎嶇且正確了。
第三次(正確的)**如下:
int main()
;//將羅馬數字儲存在字串陣列裡。
int n, t;
while (scanf("%d", &n) > 0)
} printf("\n");
}}
經過測試**正確,這說明字元陣列儲存""是無效的。
但我一直在想,它為什麼會是無效的?
看了很多資料,我一直都沒有找到答案。
剛剛在優化**的時候無意中發現了字串陣列a[0][10]"ix"後沒有逗號。
第四次(正確的)**如下:
#includeint main()
;//將羅馬數字儲存在字串陣列裡。
int n, t;
while (scanf("%d", &n) > 0)
printf("\n");
}}
沒想到乙個簡簡單單的符號引起了一系列的錯誤。
寫**一定要嚴謹呀!
c語言字串初始化 C 字串
c 提供了以下兩種型別的字串表示形式 c 風格的字串起源於 c 語言,並在 c 中繼續得到支援。字串實際上是使用null字元 0 終止的一維字元陣列。因此,乙個以 null 結尾的字串,包含了組成字串的字元。下面的宣告和初始化建立了乙個 hello 字串。由於在陣列的末尾儲存了空字元,所以字元陣列的...
C 列表初始化,字串初始化
列表初始化 int a 0 int a 全面應用 int a int a 0 預設初始化 定義變數時,沒有指定初值,則變數被預設初始化。定義函式體外的變數被初始化為0,函式體內部的內建型別變數不被初始化。字串初始化 string s1 string s2 s1 string s2 s1 string...
字串初始化
在c語言程式設計中,當我們宣告乙個字串陣列的時候,常常需要把它初始化為空串。總結起來有以下三種方式 1 char str 10 2 char str 10 3 char str 10 str 0 0 第 1 2 種方式是將str陣列的所有元素都初始化為 0 而第 3 種方式是只將str陣列的第乙個元...