搜索
查看: 3069|回复: 18
打印 上一主题 下一主题

初学者的scanf使用问题,这不科学啊!!

[复制链接]
跳转到指定楼层
楼主
发表于 2013-8-15 08:29:19 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
6啊哈币
小弟初学c语言,按照论坛的教材一点一点的学习。当学到第七节的scanf指令时出现了奇怪的一幕。
按照教材上的例子写的程序。
这是教材上的例子:
这是我比着写的程序:
#include <stdio.h>
#include <stdlib.h>
int main()
{   system("color f2");
  
        int a,b,c;
    printf("这是一个加法运算器,欢迎使用。\n");
    printf("..............................\n");
    printf("请输入第一个数字(实数),完毕后回车\n");
    scanf("%d%\n",&a);
    printf("请输入第二个数字(实数),完毕后回车\n");
    scanf("%d%\n",&b);
    c=a+b;
    printf("%d+%d=%d\n",a,b,c);
    system("pause");
        return 0;
}
当运行程序时 出现  "请输入第一个数字(实数),完毕后回车“  输入第一个数字后 回车没反应 然后再输入第二个数字 回车后显示 "请输入第二个数字(实数),完毕后回车" 输入第三个数字 回车 显示是第一个和第二个数字的和 而不是显示第一个和第三个的和?? 另外为啥显示 "请输入第一个数字(实数),完毕后回车”时需要输入两个数字 按回车才能执行下一步呢??这不科学啊???
这是程序执行时的情况:

沙发
发表于 2013-8-15 10:01:51 | 只看该作者
scanf("%d%\n",&a);
scanf("%d%\n",&b);
->
  1. scanf("%d",&a);
  2. scanf("%d",&b);
复制代码
板凳
发表于 2013-8-15 10:04:17 | 只看该作者
还有,如果你要是实数的话,把int改成double,把%d改成%lf
地板
 楼主| 发表于 2013-8-15 10:27:34 | 只看该作者
航空兔子 发表于 2013-8-15 10:01
scanf("%d%\n",&a);
scanf("%d%\n",&b);
->

去了\n也不行啊  还是那样啊 !!!
5#
 楼主| 发表于 2013-8-15 10:36:28 | 只看该作者
本帖最后由 lanhu 于 2013-8-15 10:38 编辑
航空兔子 发表于 2013-8-15 10:04
还有,如果你要是实数的话,把int改成double,把%d改成%lf

你好!!按照您的方法改了之后输入数字的问题解决了,但是又出现了新的问题结果显示不对啊!!!
新程序:#include <stdio.h>
#include <stdlib.h>
int main()
{   system("color f2");
  
        double a,b,c;
    printf("这是一个加法运算器,欢迎使用。\n");
    printf("..............................\n");
    printf("请输入第一个数字(实数),完毕后回车\n");
    scanf("%if",&a);
    printf("请输入第二个数字(实数),完毕后回车\n");
    scanf("%if",&b);
    c=a+b;
    printf("%if+%if=%if\n",a,b,c);
    system("pause");
        return 0;
}
问题截图:

另外 我还是想按照之前的那个思路整!!您的double  %if  我有点看不懂!!!教材才看到69页呢!!

点评

大哥,是%lf不是%if!  发表于 2013-8-15 11:04
6#
发表于 2013-8-15 10:38:32 | 只看该作者
lanhu 发表于 2013-8-15 10:27
去了\n也不行啊  还是那样啊 !!!

你仔细检查检查和例子有什么不同的

格式化字符串里不要有多余的空白字符

点评

嗯嗯,的确得  发表于 2013-11-15 10:34
他把%lf写成了%if  发表于 2013-8-15 11:05
7#
 楼主| 发表于 2013-8-15 10:43:54 | 只看该作者
大哥好了!! 但是我也不知道咋好的,我就把第二句 int a,b,c 重新写了一遍就好了!!!郁闷啊!!!!
8#
 楼主| 发表于 2013-8-15 11:08:13 | 只看该作者
lanhu 发表于 2013-8-15 10:36
你好!!按照您的方法改了之后输入数字的问题解决了,但是又出现了新的问题结果显示不对啊!!!
新程序 ...

i大写??

9#
发表于 2013-8-15 11:13:10 | 只看该作者
航空兔子 发表于 2013-8-15 10:04
还有,如果你要是实数的话,把int改成double,把%d改成%lf

再说一遍请您别用点评功能好吗……
那是他后来编辑的一开始没有
10#
发表于 2013-8-15 11:15:22 | 只看该作者
lanhu 发表于 2013-8-15 11:08
i大写??

字母L的小写,不是字母I

另外printf的占位符仍然是%f , %lf是非标准的
11#
发表于 2013-8-15 19:37:48 | 只看该作者
貌似多了一个%  scanf("%d%\n",&a);    scanf("%d%\n",&b);
12#
发表于 2013-8-15 20:19:06 | 只看该作者
"%\n"是什么?scanf()函数的第一个参数是const char,是固定的几个字符串。好像还没听说有“%\n”啊?这……
13#
发表于 2013-8-15 20:23:39 | 只看该作者
a 读浮点值(仅适用于 C99)
A 读浮点值(仅适用于 C99)
c 读单字符
d 读十进制整数
i 读十进制、八进制、十六进制整数
e 读浮点数
E 读浮点数
f 读浮点数
F 读浮点数(仅适用于 C99)
g 读浮点数
G 读浮点数
o 读八进制数
s 读字符串
x 读十六进制数
X 读十六进制数
p 读指针值
n 至此已读入值的等价字符数
u 读无符号十进制整数
[ ] 扫描字符集合
% 读 % 符号(百分号)
附加格式说明字符表修饰符说明
L/l 长度修饰符 输入"长"数据
h 长度修饰符 输入"短"数据
W 整型常数 指定输入数据所占宽度
* 表示本输入项在读入后不赋值给相应的变量
14#
发表于 2013-8-15 20:24:26 | 只看该作者
这是百度百科关于scanf()参数的记录。
15#
发表于 2013-8-15 20:24:41 | 只看该作者
空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表