[問題] 陣列內元素變為最後輸入的字串

看板C_and_CPP (C/C++)作者 (傑尼)時間3年前 (2020/10/23 00:57), 編輯推噓8(8044)
留言52則, 2人參與, 3年前最新討論串1/1
開發平台(Platform): (Ex: Win10, Linux, ...) win10 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) devc++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)問題(Question): 陣列內元素變為最後輸入的字串 餵入的資料(Input): 浮點數,用陣列儲存 預期的正確結果(Expected Output): 判定是否為浮點數 錯誤結果(Wrong Output): 陣列內元素都是一樣的 程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔) https://glot.io/snippets/fscp7lm85d 補充說明(Supplement): https://imgur.com/eJTs2z6
我自己用devc++執行的成果 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.217.95.73 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1603385825.A.9A7.html

10/23 01:02, 3年前 , 1F
scanf("%s",number);改成scanf("%s",&number);
10/23 01:02, 1F

10/23 01:02, 3年前 , 2F
要改值一定要傳位址R
10/23 01:02, 2F

10/23 01:05, 3年前 , 3F
忽略上面我知道你問題在哪了
10/23 01:05, 3F

10/23 01:07, 3年前 , 4F
number被改爛了
10/23 01:07, 4F

10/23 01:07, 3年前 , 5F
一樣是number的問題,你number一變前面都會跟著變
10/23 01:07, 5F

10/23 01:08, 3年前 , 6F
number是位址~~~你只是一值改number指向的值而已~
10/23 01:08, 6F

10/23 01:09, 3年前 , 7F
那我這邊怎麼改才會變成我想要的結果呢
10/23 01:09, 7F

10/23 01:15, 3年前 , 8F
不能動架構嗎?
10/23 01:15, 8F

10/23 01:16, 3年前 , 9F
還有我有一個問題 你要輸入浮點數float不是才佔4byte
10/23 01:16, 9F

10/23 01:17, 3年前 , 10F
為什麼要用50byte?
10/23 01:17, 10F

10/23 01:19, 3年前 , 11F
我只是多給他大小而已,我不清楚我要如何修改他才會變成
10/23 01:19, 11F

10/23 01:19, 3年前 , 12F
我想要的結果,我能想到的只有這樣而已QQ
10/23 01:19, 12F

10/23 01:21, 3年前 , 13F
幫你改好了
10/23 01:21, 13F

10/23 01:21, 3年前 , 14F
改成宣告 char number[50][50];
10/23 01:21, 14F

10/23 01:21, 3年前 , 15F
改 scanf("%s",number[i]);
10/23 01:21, 15F

10/23 01:22, 3年前 , 16F
改 a[i]=number[i];
10/23 01:22, 16F

10/23 01:22, 3年前 , 17F
萬事如意
10/23 01:22, 17F

10/23 01:23, 3年前 , 18F
換句話說,我只能用二維陣列存放資料,再去做判定跟修改
10/23 01:23, 18F

10/23 01:24, 3年前 , 19F
因為你原本寫的是改number指向的值,然後把number的
10/23 01:24, 19F

10/23 01:24, 3年前 , 20F
位址放進a[i]
10/23 01:24, 20F

10/23 01:25, 3年前 , 21F
我舉個例: 你原本像是一個迴圈指令 var=num
10/23 01:25, 21F

10/23 01:26, 3年前 , 22F
但你每次指定給a[i]的都是&var
10/23 01:26, 22F

10/23 01:26, 3年前 , 23F
那等於沒改
10/23 01:26, 23F

10/23 01:26, 3年前 , 24F
只是剛好C字串的位址就是他的字串,你誤以為傳到值
10/23 01:26, 24F

10/23 01:27, 3年前 , 25F
我明白了,也就是不同的值要指向不同的位子
10/23 01:27, 25F

10/23 01:27, 3年前 , 26F
我的寫法是讓他通通指向同一個位子,所以才有問題
10/23 01:27, 26F

10/23 01:27, 3年前 , 27F

10/23 01:28, 3年前 , 28F
對R
10/23 01:28, 28F

10/23 01:28, 3年前 , 29F
感謝大大
10/23 01:28, 29F

10/23 01:28, 3年前 , 30F
迴圈指定字串不可能在同一個字串內搞
10/23 01:28, 30F

10/23 01:28, 3年前 , 31F
因為字串本身就是位址
10/23 01:28, 31F

10/23 01:29, 3年前 , 32F
因為陣列是常數指標,所以我不能在迴圈這樣搞
10/23 01:29, 32F

10/23 01:29, 3年前 , 33F
除非拆解原number[0]+number[1]這種方法,但要重構
10/23 01:29, 33F

10/23 01:30, 3年前 , 34F
算了上面那句話當我沒說
10/23 01:30, 34F

10/23 01:30, 3年前 , 35F
式的
10/23 01:30, 35F

10/23 01:31, 3年前 , 36F
因為小弟我沒學到那麼深奧,所以只能用最原始的方法處理
10/23 01:31, 36F

10/23 01:33, 3年前 , 37F
我把我01:29的話重新講一次好惹
10/23 01:33, 37F

10/23 01:34, 3年前 , 38F
你要用指向的寫法寫 要類似這樣
10/23 01:34, 38F

10/23 01:34, 3年前 , 39F
int main(void){
10/23 01:34, 39F

10/23 01:34, 3年前 , 40F
char a[10];
10/23 01:34, 40F

10/23 01:34, 3年前 , 41F
a[0]='a'; a[1]='b', a[2]='c' ;}
10/23 01:34, 41F

10/23 01:35, 3年前 , 42F
這種就是指向的方法
10/23 01:35, 42F

10/23 01:36, 3年前 , 43F
拆成一個個字元去做存入的動作吧?這樣才能指向?
10/23 01:36, 43F

10/23 01:37, 3年前 , 44F
你就會得到a="abc" 再用atof轉就可以,照你原本邏輯是這
10/23 01:37, 44F

10/23 01:37, 3年前 , 45F
對啊
10/23 01:37, 45F

10/23 01:37, 3年前 , 46F
%s跟%c的作法不一樣RRRR
10/23 01:37, 46F

10/23 01:38, 3年前 , 47F
但就要重構你的程式碼了我也沒寫過但一定可行
10/23 01:38, 47F

10/23 01:39, 3年前 , 48F
你的問題這樣有解決了嗎
10/23 01:39, 48F

10/23 01:39, 3年前 , 49F
有,我明白該如何處理了,謝謝大大解惑
10/23 01:39, 49F

10/23 01:44, 3年前 , 50F
建議*a[50] 也改成a[50][50]
10/23 01:44, 50F

10/23 01:45, 3年前 , 51F
沒是忽略上面的那段話我以為會存取錯誤應該不會
10/23 01:45, 51F

10/23 01:46, 3年前 , 52F
好的,我明白啦,感謝
10/23 01:46, 52F
文章代碼(AID): #1VaRdXcd (C_and_CPP)
文章代碼(AID): #1VaRdXcd (C_and_CPP)