線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1294
推到 Plurk!
推到 Facebook!

字串陣列

答題得分者是:dllee

中階會員


發表:36
回覆:142
積分:70
註冊:2003-07-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-12-09 18:26:34 IP:163.23.xxx.xxx 未訂閱
各位前輩好:    小弟昨天測試一個程式,想說應該可以,嗯,不過事與願違是常有的事 程式是讓使用者輸入五筆資料,每一筆資料包括名字及兩個成積 成績的部份沒有問題,就是用 int 陣列去儲存 但是名字的部份就無法用字串陣列來存...小弟僅列名字的部份就好
 
# include 
# include 
# include     void main()
{
  int i=0 ;
  char *name[5] , temp1[50] , temp2[50] ;        while(i<5)     // 連續輸入五筆
      {
        printf("student %d name : " , i 1 ) ;
        scanf("%s", &temp1) ;    // 輸入
        name[i] = strcpy(temp2,temp1) ;    // 回傳 temp1 給 name[i]
        printf("\n");
        i   ;
      }
    for ( i=0 ; i<5 ; i   )
      {
        printf("%s ",name[i]);
      }
    getch();
}    不知道該怎麼以 while 或 for 來寫,請前輩指導
小弟這次訂的主題若是訂的不好請多多包涵與指導 謝謝回答 發表人 - 流 於
CuteBabyBoy
初階會員


發表:18
回覆:97
積分:48
註冊:2003-07-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-12-09 22:06:26 IP:61.230.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-12-09 22:27:34 IP:163.23.xxx.xxx 未訂閱
 CuteBabyBoy 您好:    若宣告為 char *temp2 ,程式會出問題
name[i] = strcpy(temp2,temp1) ;    小弟會加 & 是一種習慣,如:
int x ;
scanf("%d",&x) ;    小弟不懂以下兩者的差別 
scanf("%s", &temp1) ; 
scanf("%s", temp1) ;
可否請您說明一下    謝謝您的回答,小弟有試過了,還是差了一點點 
     
        
CuteBabyBoy
初階會員


發表:18
回覆:97
積分:48
註冊:2003-07-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-12-09 23:33:34 IP:61.224.xxx.xxx 未訂閱
流 您好: 您是否有注意到 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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-12-09 23:50:39 IP:61.224.xxx.xxx 未訂閱
To 流 在您的原程式碼中 雖然您是用 name[5] 記錄取輸入的值的位置 ( 因為宣告成 char * ) 但在您的迴圈中... 您所輸入的值一直都存入 temp2[50] 的區塊中 所以您的 name[5]如下 name[0]=temp2; name[1]=temp2; name[2]=temp2; name[3]=temp2; name[4]=temp2; 而您所秀出來的值永遠是最後一筆 因為存值的空間都是一樣的
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-12-09 23:53:00 IP:210.201.xxx.xxx 未訂閱
您好, 基本上,您的程式有一些問題喔! 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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-12-10 00:17:50 IP:163.23.xxx.xxx 未訂閱
小弟在此先感謝版上兩位先進的回答、解惑,謝謝    問題已經解決了 參考了 dllee 先進的 code 後曉得,原來是小弟對 C 下的功夫還不夠 < > 而小弟第一篇發問的文章中,程式的編譯與執行都沒有問題 但誠如兩位先進所講的一樣,列印出來是最後一個輸入的字串 小弟會再詳細的閱讀兩位先進的回覆增長自己的觀念 不然老是在同學面前丟人現眼也不是辦法 < > 分數就給 dllee 先進,請 CuteBabyBoy 先進多多包涵 小弟發問完睡前就一直在想是不是用二維字元陣列 不過手邊沒 C 進階的書,只有基礎入門,也不知怎麼用起 再一次感謝兩位先進熱心的指導小弟不足的觀念
系統時間:2024-05-18 17:54:49
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!