搜索
查看: 1734|回复: 15
打印 上一主题 下一主题

问下如果我写成这样会怎么样?

[复制链接]
跳转到指定楼层
楼主
发表于 2014-7-13 11:40:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int a,b,c;
    printf("这是一个加法计算器,欢迎使用\n\n");
    printf("请输入第一个数(输入完毕后请按回车)\n");
    scanf("%d",&a);
    printf("请输入第二个数(输入完毕后请按回车)\n");
    scanf("%d",&b);
    c=a+b;
    printf("它们的和是%d\n",c);
        system("pause");
        return 0;
}







对比一下两个编译之后有什么区别?



#include <stdio.h>#include <stdlib.h>int main(){    int a,b,c;    printf("这是一个加法计算器,欢迎使用\n\n");    printf("请输入第一个数(输入完毕后请按回车)\n");    scanf("%d\n",&a);    printf("请输入第二个数(输入完毕后请按回车)\n");    scanf("%d\n",&b);    c=a+b;    printf("它们的和是%d\n",c);        system("pause");        return 0;

楼主新帖
楼主热帖
沙发
发表于 2014-7-13 14:00:51 | 只看该作者
第二个会有一个死循环
板凳
 楼主| 发表于 2014-7-13 17:11:52 | 只看该作者
李掌柜 发表于 2014-7-13 14:00
第二个会有一个死循环

什么意思?为什么呢?
地板
 楼主| 发表于 2014-7-13 17:15:30 | 只看该作者
李掌柜 发表于 2014-7-13 14:00
第二个会有一个死循环

那如果我想在输入一个数字后空一行再输另外一个数应该怎么写呢?
5#
发表于 2014-7-13 21:06:45 | 只看该作者
根本就没有循环,哪里来的死循环

首先,制表符,换行和空格这三个叫空白字符
scanf的一个空白字符匹配任意多个空白字符,直到读到一个非空白字符
所以输入完后按回车键会继续读取,输入一些不被需要的非空白字符才能继续
6#
发表于 2014-7-14 07:50:15 | 只看该作者
fsz12315 发表于 2014-7-13 17:15
那如果我想在输入一个数字后空一行再输另外一个数应该怎么写呢?

我们通常都是以【Enter】回车键做scanf();函数的结束标示符,问题就出在‘\n’,,,
7#
发表于 2014-7-14 15:37:00 | 只看该作者
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int a,b,c;
    printf("这是一个加法计算器,欢迎使用\n\n");
    printf("请输入第一个数(输入完毕后请按回车)\n");
    scanf("%d",&a);
    printf("请输入第二个数(输入完毕后请按回车)\n");
    scanf("%d",&b);
    c=a+b;
    printf("它们的和是%d\n",c);
        system("pause");
        return 0;
}
----------------
如果不小心按错了,输入的是字母,恭喜你会跳过第二个数字输入直接给你个答案:28.
谁能解答下why?
8#
发表于 2014-7-14 15:37:07 | 只看该作者
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int a,b,c;
    printf("这是一个加法计算器,欢迎使用\n\n");
    printf("请输入第一个数(输入完毕后请按回车)\n");
    scanf("%d",&a);
    printf("请输入第二个数(输入完毕后请按回车)\n");
    scanf("%d",&b);
    c=a+b;
    printf("它们的和是%d\n",c);
        system("pause");
        return 0;
}
----------------
如果不小心按错了,输入的是字母,恭喜你会跳过第二个数字输入直接给你个答案:28.
谁能解答下why?
9#
发表于 2014-7-14 18:11:21 | 只看该作者
嗨,强哥! 发表于 2014-7-14 15:37
#include
#include
int main()

例如第一个就输入的是字母
第一个scanf从标准输入流读取,想要读取一个数字,发现了一个字母,那么这个scanf失败,a的值未改变
下一个scanf一样失败

然后a,b的值都没有改变
a,b没有初始化,初始值是未指明的,一般的实现中是内存残留的一个随机值
然后输出a+b的值,这个值对于用户没有意义
10#
发表于 2014-7-20 09:58:57 | 只看该作者
同意5楼的。
\n  是换行的意思,在硬件上是回车键实现的。
然后scanf()函数输入结束的标志是回车
11#
发表于 2014-7-21 10:46:51 | 只看该作者
rosynirvana 发表于 2014-7-14 18:11
例如第一个就输入的是字母
第一个scanf从标准输入流读取,想要读取一个数字,发现了一个字母,那么这个s ...

感谢解答,对输入流及scanf()又进一步理解了。
12#
发表于 2014-7-21 10:48:35 | 只看该作者
schein 发表于 2014-7-20 09:58
同意5楼的。
\n  是换行的意思,在硬件上是回车键实现的。
然后scanf()函数输入结束的标志是回车

scanf()函数输入结束的标志是回车,----对scanf,空格符,制表符好像也是输入结束标志。不知道我说的是不是,有时间编程验证一下。
13#
发表于 2014-7-21 10:51:50 | 只看该作者
schein 发表于 2014-7-20 09:58
同意5楼的。
\n  是换行的意思,在硬件上是回车键实现的。
然后scanf()函数输入结束的标志是回车

scanf输入结束的标志是回车?楼里面的这个例子刚好说明输入结束和回车关系不大吧
14#
发表于 2014-7-22 09:54:06 | 只看该作者
嗨,强哥! 发表于 2014-7-21 10:48
scanf()函数输入结束的标志是回车,----对scanf,空格符,制表符好像也是输入结束标志。不知道我说的是不 ...

我可能没理解他的那句叙述

scanf只要匹配完所有的占位符就会结束,回车的作用只是把输入从缓冲区传递给程序,或者说刷新缓冲区
但是刷新缓冲区的方法不止回车一种,所以说scanf结束的标志是回车是不正确的
15#
发表于 2014-7-22 10:01:01 | 只看该作者
rosynirvana 发表于 2014-7-22 09:54
我可能没理解他的那句叙述

scanf只要匹配完所有的占位符就会结束,回车的作用只是把输入从缓冲区传递 ...

看懂了你表达的意思。谢谢。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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