标题:大家好,问一个问题!我在用Dev c++在第一次编写回文数这个程序时,在scanf ...
只看楼主
吕孟伟
Rank: 8Rank: 8
等 级:贵宾
威 望:27
帖 子:200
专家分:870
注 册:2018-10-4
结帖率:100%
已结贴  问题点数:20 回复次数:11 
大家好,问一个问题!我在用Dev c++在第一次编写回文数这个程序时,在scanf中漏写地址符&,可是编译时为什么不报错,竟然编译成功,但输不出结果。
#include<stdio.h>

int main(void)
{
    int m;
    int val;
    int sum = 0;
   
    printf("请输入一个回文数:");
    scanf("%d", val);
   
    m = val;
    while (m)
    {
        sum = sum * 10 + m%10;
        m /= 10;
    }
    if (sum == val){
        printf("yes!");
    }else{
        printf("no!");
    }
   
    return 0;
}
请问这是什么原因?

[此贴子已经被作者于2018-11-12 21:16编辑过]

搜索更多相关主题的帖子: 回文 scanf 编译 int sum 
2018-11-12 21:12
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:7 
不定参数函数 不检查不定参数类型
你乱写 编译器就乱编译

https://zh.
2018-11-12 21:17
Tomorrw_I
Rank: 10Rank: 10Rank: 10
等 级:禁止访问
威 望:6
帖 子:406
专家分:1712
注 册:2018-10-16
得分:7 
新手就按规矩来!    编译器的一些问题,根本没必要纠结!
书里、教程里,明确写的,都是经验之谈,新手别纠结太多!  按规矩写,慢慢都就明白了

学C有用吗?
学C++有前途吗?
数据库有必要学吗?
……
别问,你还什么都不会,学就对了
……
2018-11-12 21:58
C基础
Rank: 6Rank: 6
等 级:侠之大者
威 望:6
帖 子:133
专家分:421
注 册:2018-10-15
得分:6 
你这个问题我也亲身经历过,好奇是好事,但是这个问题不用太深考虑,就像Dev c++不能用void 定义主函数一样,你可以把它理解是一个软件的自身运行方式上的差异,不用太纠结的。
2018-11-12 22:03
吕孟伟
Rank: 8Rank: 8
等 级:贵宾
威 望:27
帖 子:200
专家分:870
注 册:2018-10-4
得分:0 
回复 2楼 lin5161678
好的,谢谢您的回答。

借用一下侯捷的话:勿在浮沙筑高台。
2018-11-13 22:29
吕孟伟
Rank: 8Rank: 8
等 级:贵宾
威 望:27
帖 子:200
专家分:870
注 册:2018-10-4
得分:0 
回复 3楼 Tomorrw_I
好的,谢谢您的回答!

借用一下侯捷的话:勿在浮沙筑高台。
2018-11-13 22:30
吕孟伟
Rank: 8Rank: 8
等 级:贵宾
威 望:27
帖 子:200
专家分:870
注 册:2018-10-4
得分:0 
回复 4楼 C基础
好的,谢谢您的回答!

借用一下侯捷的话:勿在浮沙筑高台。
2018-11-13 22:30
吕孟伟
Rank: 8Rank: 8
等 级:贵宾
威 望:27
帖 子:200
专家分:870
注 册:2018-10-4
得分:0 
回复 2楼 lin5161678
哥哥,我是新手,这个程序是看郝斌老师的视频敲得,是我粗心少敲了地址符,就这个程序我想问您个问题!在缺少地址符的情况下,怎么写Dev c++才会报错呢?请您解惑!十分感谢!

借用一下侯捷的话:勿在浮沙筑高台。
2018-11-17 17:24
zbjzbj
Rank: 12Rank: 12Rank: 12
来 自:郑州
等 级:贵宾
威 望:52
帖 子:620
专家分:3020
注 册:2011-4-22
得分:0 
&a的意思就是变量a的地址。scanf("%d", &a)的编译效果就是从你的输入中找到整型值把它写到地址编号为(&a)的地址中去。比如变量a的地址是0x33333333,那么就是把数值写到地址0x33333333,那么自然,写到0x33333333地址的数值,也就成了变量a的值。因为变量a的值就储存在这个地址。
scanf("%d", a),就是扫描你的输入,从中找出整形数值,把他写入地址编号为a的地址中。
scanf("%d", 12345678),就是扫描输入,找到整形数值,把他写入地址编号为12345678的地址中去。
不管你提供的地址是什么形式,编译器都认为你已经提供了地址,所以编译能通过,只是在程序运行过程中,往你提供的地址写数据一旦写不上去,程序运行将中止,并报错。写不上去的原因是此地址该程序没有写入权限,或者地址非法,当然这是操作系统管辖范围,编译器不管这些。
2018-11-17 17:50
s450046181
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2018-11-17
得分:0 

我是第一次来到这个论坛,今天刚注册的账号;新手来报道一下,顺便回答同学们的问题呵呵,我也是新手,跟着你们一起学习!
你的错误在于没有去变量的内存地址; & 代表取地址符,  
2018-11-17 18:16



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-491204-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.895340 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved