免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 5948 | 回复: 28
打印 上一主题 下一主题

请教一个很简单的问题,关于输入的 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-17 23:06 |只看该作者 |倒序浏览
对于下面的代码:

  1. #include<stdio.h>
  2. #include<stdlib.h>

  3. int main()
  4. {
  5.         int i, j;
  6.         scanf("%d %d\n", &i, &j);
  7.         printf("i=%d,j=%d\n", i, j);
  8.         return 0;
  9. }
复制代码


为什么在scanf()中加了\n之后,在输入了两个整数之后,还需要再输入一个不是空格或者回车的字符, 才可以执行后面的printf()
函数呢?
但是如果不加\n就可以直接打印出来了. scanf()在输入时对于这个\n是怎么处理的啊?
希望哪位高手能指教一下. 谢谢!

论坛徽章:
0
2 [报告]
发表于 2007-08-17 23:23 |只看该作者
匹配问题,scanf中的其他字符在输入的时候都要按原样输入

论坛徽章:
0
3 [报告]
发表于 2007-08-17 23:54 |只看该作者
是啊, 但是我在输入了两个数字之后也按了回车的,而且多次回车. 仍然还是停留在scanf()这个地方.只有再输入一个非空格或者回车的字符才可以继续往下面执行. 我想知道scanf() 到底是怎样进行处理的.,为什么按了回车,仍然还要再多输入一个字符 谢谢!

论坛徽章:
0
4 [报告]
发表于 2007-08-18 00:07 |只看该作者
你就不要写这样的代码不就行了?这种习惯不好。
你是受到printf的影响了吧?

论坛徽章:
0
5 [报告]
发表于 2007-08-18 00:15 |只看该作者
原帖由 cviolet 于 2007-8-18 00:07 发表
你就不要写这样的代码不就行了?这种习惯不好。
你是受到printf的影响了吧?



这话在理, 确实, 很多问题只要自己按照规矩办事. 就不会出很多问题. 不过如果能了解一些其是如何实现的, 则会更好.
个人感觉这个输入输出流机制是比较复杂的, 而且在不同的系统上某些相同的函数都有不同的实现.
但是按照规矩来做, 则应该可以避免这些不确定因素.

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
6 [报告]
发表于 2007-08-18 12:41 |只看该作者
原帖由 cunettenuc 于 2007-8-17 23:06 发表
对于下面的代码:

#include
#include

int main()
{
        int i, j;
        scanf("%d %d\n", &i, &j);
        printf("i=%d,j=%d\n", i, j);
        return 0;
}


为什么在scanf()中加了\n之后,在输入了两个整数之后, ...

怀疑你贴的代码和你实际用的不同。还有,你在输入的时候是怎么输入的,把整个执行过程拷贝一下贴上来。

论坛徽章:
0
7 [报告]
发表于 2007-08-18 15:52 |只看该作者
原帖由 MMMIX 于 2007-8-18 12:41 发表

怀疑你贴的代码和你实际用的不同。还有,你在输入的时候是怎么输入的,把整个执行过程拷贝一下贴上来。



code.c

  1. #include<stdio.h>
  2. int main()
  3. {
  4.         int i, j;
  5.         scanf("%d %d\n", &i, &j);
  6.         printf("%d %d\n", i, j);
  7.         return 0;
  8. }
复制代码


输入的是
1 2 (此时按回车, 仍然不会将i, j的值打印出来).
如果在这里我再输入其它的字符,如 3, 则可以将后面的i,j的值打印出来. 如果我在scanf()中不加那个 \n, 则不会有这种情况发生.

论坛徽章:
0
8 [报告]
发表于 2007-08-18 15:59 |只看该作者
原来键盘输入很容易出怪异的东西,应该严格控制输入格式……或者多使用fflush(stdin);

论坛徽章:
0
9 [报告]
发表于 2007-08-18 16:00 |只看该作者
之所以会出现这样的情况,正是因为这个 \n。\n 命令 scanf 吃掉输入中的所有回车,直到遇到非回车和非空格字符为止(scanf 默认会吃掉空格)。

论坛徽章:
0
10 [报告]
发表于 2007-08-18 16:01 |只看该作者
原帖由 ye888 于 2007-8-18 15:59 发表
原来键盘输入很容易出怪异的东西,应该严格控制输入格式……或者多使用fflush(stdin);

yet another one who do not what fflush is used for.
i suggest u search 'why fflush(stdin) is wrong' and read the hits

[ 本帖最后由 mmmixx 于 2007-8-18 16:02 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP