字串陣列 |
答題得分者是:dllee
|
流
中階會員 發表:36 回覆:142 積分:70 註冊:2003-07-24 發送簡訊給我 |
各位前輩好: 小弟昨天測試一個程式,想說應該可以,嗯,不過事與願違是常有的事
程式是讓使用者輸入五筆資料,每一筆資料包括名字及兩個成積
成績的部份沒有問題,就是用 int 陣列去儲存
但是名字的部份就無法用字串陣列來存...小弟僅列名字的部份就好
# include小弟這次訂的主題若是訂的不好請多多包涵與指導 謝謝回答 發表人 - 流 於 |
CuteBabyBoy
初階會員 發表:18 回覆:97 積分:48 註冊:2003-07-11 發送簡訊給我 |
Dear 流 因為我身邊目前沒有TC的環境,所以我的回應內容並無驗證,如果有問題請多多包含。 我覺得您其中有幾個問題點,您可以查查看 -----------------------------
scanf("%s", &temp1) ; // 輸入
改為
scanf("%s", temp1) ; // 輸入
-----------------------------
您可以參考以下的改寫 int i=0;
char *name[5] , temp1[50] , *temp2; while(i<5) // 連續輸入五筆
{
temp2 = new char[50];
printf("student %d name : " , i 1 ) ;
scanf("%s", temp1) ; // 輸入
name[i] = strcpy(temp2,temp1) ; // 回傳 temp1 給 name[i]
printf("\n");
i
}
-----------------------------
您的問題點應該是,記憶體同一位置不斷的在蓋值
-----------------------------
希望對您有幫助
|
流
中階會員 發表:36 回覆:142 積分:70 註冊:2003-07-24 發送簡訊給我 |
|
CuteBabyBoy
初階會員 發表:18 回覆:97 積分:48 註冊:2003-07-11 發送簡訊給我 |
流 您好: 您是否有注意到
temp2 = new char[50];
我在猜您 char *temp2 會有問題,是因為沒有設 "記憶體區塊" (不知道我形容的好不好) 如果是 & 的問題,您可以參考 C 的書籍
我的記法可能跟別人不太一樣...您就先參考看看吧...^^ & ==> 我會視為 " XX 的位置 "
* ==> 我會視為 " XX 的內容 " 舉例來說 int x ; ==> 宣告一個變數叫 x
int *P ; ==> 宣告一個指標變數叫 P
int **Q ; ==> 宣告一個指標的指標變數叫 Q
P=&x ; ==> 將 x 變數的位置存入 P
Q=&P ; ==> 將 P 指標的位置存入 Q
x=10 ; ==>
此時 *P 也等於 10
此時 **Q 也等於 10 scanf("%s",&x) ; ==> 將 %s 丟入 x的位置內 如果您今天宣告
char x;
scanf("%s",&x) ; ==> ok 因為 x 的位置就是 &x 但如果您是以下的寫法
char x[50];
scanf("%s",&x) ; ==> Error 因為 x[50] 的位置就是 x
而 &x 是 x[50] 的位置的位置 哈...我不知道我舉的例好不好
因為我是用我的口語來表達 如果聽的霧傻傻請見諒
|
CuteBabyBoy
初階會員 發表:18 回覆:97 積分:48 註冊:2003-07-11 發送簡訊給我 |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
您好,
基本上,您的程式有一些問題喔!
scanf 用法:
int scanf(const char *format[, address, ...]);
在 format 之後的應該都只是單純的指標,除非您有特殊的應用。
以輸入字串來說,以下的方法就可以:
char myString[100]; scanf("%s",myString);因為 myString 本身就是一個指標,指向這 100 個字元的陣列。 如果您使用 &myString 則表示儲存 myString 指標的指標。 另一個 strcpy 您在使用上也算是誤用。 strcpy 用法: char *strcpy(char *dest, const char *src); 其回傳值就是 dest 指標,按您的程式, strcpy(temp2,temp1) 中, temp2,temp1 都是指標常數,不會變的, 所以固定傳回 temp2 指標的數值,最後您的 name[i] 內容應該都相同, 都是 temp2 指標的數值,結果是印出 5 個最後輸入的文字。 試試(我沒實測喔): int i; char name[5][50]; for(i=0;i<5;i ) { printf("\nstudent %d name : " , i 1 ) ; scanf("%s",name[i]); } printf("\n\nResult:\n") ; for(i=0;i<5;i ) { printf("student %d name : %s\n" , i 1, name[i] ) ; }沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com |
流
中階會員 發表:36 回覆:142 積分:70 註冊:2003-07-24 發送簡訊給我 |
小弟在此先感謝版上兩位先進的回答、解惑,謝謝 問題已經解決了
參考了 dllee 先進的 code 後曉得,原來是小弟對 C 下的功夫還不夠 < >
而小弟第一篇發問的文章中,程式的編譯與執行都沒有問題
但誠如兩位先進所講的一樣,列印出來是最後一個輸入的字串 小弟會再詳細的閱讀兩位先進的回覆增長自己的觀念
不然老是在同學面前丟人現眼也不是辦法 < > 分數就給 dllee 先進,請 CuteBabyBoy 先進多多包涵
小弟發問完睡前就一直在想是不是用二維字元陣列
不過手邊沒 C 進階的書,只有基礎入門,也不知怎麼用起 再一次感謝兩位先進熱心的指導小弟不足的觀念
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |