作者wm0116 (杰尼)
看板C_and_CPP
标题[问题] 阵列内元素变为最後输入的字串
时间Fri Oct 23 00:57:02 2020
开发平台(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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1603385825.A.9A7.html
1F:推 ucrxzero: scanf("%s",number);改成scanf("%s",&number); 10/23 01:02
2F:→ ucrxzero: 要改值一定要传位址R 10/23 01:02
3F:推 ucrxzero: 忽略上面我知道你问题在哪了 10/23 01:05
4F:推 ucrxzero: number被改烂了 10/23 01:07
5F:→ ucrxzero: 一样是number的问题,你number一变前面都会跟着变 10/23 01:07
6F:→ ucrxzero: number是位址~~~你只是一值改number指向的值而已~ 10/23 01:08
7F:→ wm0116: 那我这边怎麽改才会变成我想要的结果呢 10/23 01:09
8F:推 ucrxzero: 不能动架构吗? 10/23 01:15
9F:→ ucrxzero: 还有我有一个问题 你要输入浮点数float不是才占4byte 10/23 01:16
10F:→ ucrxzero: 为什麽要用50byte? 10/23 01:17
11F:→ wm0116: 我只是多给他大小而已,我不清楚我要如何修改他才会变成 10/23 01:19
12F:→ wm0116: 我想要的结果,我能想到的只有这样而已QQ 10/23 01:19
13F:推 ucrxzero: 帮你改好了 10/23 01:21
14F:→ ucrxzero: 改成宣告 char number[50][50]; 10/23 01:21
15F:→ ucrxzero: 改 scanf("%s",number[i]); 10/23 01:21
16F:→ ucrxzero: 改 a[i]=number[i]; 10/23 01:22
17F:→ ucrxzero: 万事如意 10/23 01:22
18F:→ wm0116: 换句话说,我只能用二维阵列存放资料,再去做判定跟修改 10/23 01:23
19F:推 ucrxzero: 因为你原本写的是改number指向的值,然後把number的 10/23 01:24
20F:→ ucrxzero: 位址放进a[i] 10/23 01:24
21F:→ ucrxzero: 我举个例: 你原本像是一个回圈指令 var=num 10/23 01:25
22F:→ ucrxzero: 但你每次指定给a[i]的都是&var 10/23 01:26
23F:→ ucrxzero: 那等於没改 10/23 01:26
24F:→ ucrxzero: 只是刚好C字串的位址就是他的字串,你误以为传到值 10/23 01:26
25F:→ wm0116: 我明白了,也就是不同的值要指向不同的位子 10/23 01:27
26F:→ wm0116: 我的写法是让他通通指向同一个位子,所以才有问题 10/23 01:27
28F:→ ucrxzero: 对R 10/23 01:28
29F:→ wm0116: 感谢大大 10/23 01:28
30F:→ ucrxzero: 回圈指定字串不可能在同一个字串内搞 10/23 01:28
31F:→ ucrxzero: 因为字串本身就是位址 10/23 01:28
32F:→ wm0116: 因为阵列是常数指标,所以我不能在回圈这样搞 10/23 01:29
33F:→ ucrxzero: 除非拆解原number[0]+number[1]这种方法,但要重构 10/23 01:29
34F:→ ucrxzero: 算了上面那句话当我没说 10/23 01:30
35F:→ ucrxzero: 式的 10/23 01:30
36F:→ wm0116: 因为小弟我没学到那麽深奥,所以只能用最原始的方法处理 10/23 01:31
37F:推 ucrxzero: 我把我01:29的话重新讲一次好惹 10/23 01:33
38F:→ ucrxzero: 你要用指向的写法写 要类似这样 10/23 01:34
39F:→ ucrxzero: int main(void){ 10/23 01:34
40F:→ ucrxzero: char a[10]; 10/23 01:34
41F:→ ucrxzero: a[0]='a'; a[1]='b', a[2]='c' ;} 10/23 01:34
42F:→ ucrxzero: 这种就是指向的方法 10/23 01:35
43F:→ wm0116: 拆成一个个字元去做存入的动作吧?这样才能指向? 10/23 01:36
44F:→ ucrxzero: 你就会得到a="abc" 再用atof转就可以,照你原本逻辑是这 10/23 01:37
45F:→ ucrxzero: 对啊 10/23 01:37
46F:→ ucrxzero: %s跟%c的作法不一样RRRR 10/23 01:37
47F:→ ucrxzero: 但就要重构你的程式码了我也没写过但一定可行 10/23 01:38
48F:→ ucrxzero: 你的问题这样有解决了吗 10/23 01:39
49F:→ wm0116: 有,我明白该如何处理了,谢谢大大解惑 10/23 01:39
50F:推 ucrxzero: 建议*a[50] 也改成a[50][50] 10/23 01:44
51F:→ ucrxzero: 没是忽略上面的那段话我以为会存取错误应该不会 10/23 01:45
52F:→ wm0116: 好的,我明白啦,感谢 10/23 01:46