| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4390 人关注过本帖
标题:scanf("%d\n",&a)可以这样用么?
只看楼主 加入收藏
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 

10楼的理解有误,你的之所以能正常输出在于你输入了不合法的字符'\\','n'这两个字符导致scanf函数结束,从而继续往下执行。并非如您所说,要跟着输入"\n"才行.
scanf("%d\n",&a);这种写法很少见到,但不是没有,而且在做某些题的时候必须这样,我遇到过,但我也不知所以然
但一般来说不应该这样做,应尽量降低输入格式的要求.


对不礼貌的女生收钱......
2006-12-01 17:08
interest2000
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-11-12
收藏
得分:0 
哇呵呵,这个我也犯过,就是语法问题啦,那个\n是不能有的。
2006-12-01 18:29
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 

根据教育部考试中心出的C语言标准教程中28页下方说法
"若在scanf的格式控制串中插入了其它字符,则在输入时要求按一一对应的位置原样输入这些字符,例如:
int a1,a2,a3;
scanf("Input a1,a2,a3:%d%d%d",&a1,&a2,&a3);
要求按如下格式输入:
Input a1,a2,a3:10 20 30
"

[此贴子已经被作者于2006-12-1 21:42:23编辑过]


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2006-12-01 19:09
adm_qxx
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2005-4-5
收藏
得分:0 
感谢孔明先生的回答

学习是进步的基础.
2006-12-01 19:49
zhanghuan_10
Rank: 1
等 级:新手上路
威 望:2
帖 子:751
专家分:0
注 册:2006-10-25
收藏
得分:0 
呵呵!孔明先生说的对!原来scanf()还有这样的用啊!

该学习了。。。
2006-12-01 19:58
mn51pj
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2006-12-1
收藏
得分:0 
看了之后感觉自己又学到知识了
2006-12-01 20:03
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 

我只是认为你有误,并没有指责你,你的脾气有些急,呵呵.
你所说的scanf函数确实可以有格式要求,如你所说输入的时候要严格按照要求的格式来输入就行.
我所说的是,scanf("%d\n")其中的'\n'是一个字符,你所按照的格式是因为输入的时候输入不合法的字符导致scanf函数运行结束,从而继续想向下执行.而不是你严格遵从了输入要求的格式使得输入成功了。你红色部分的描述是对的,只是对于这句scanf("%d\n",&a);其中的'\n'理解有误,这是个转义字符。
你不妨这样一试:scanf("%d\n",&a);//在测试的时候输入3a
答案还是一样的,呵呵。因为a是非法字符(不是整型值),导致输入结束.C不向JAVA,弹出一个异常就终止程序运行,它只会默默的结束运行函数,而后继续向下执行程序.


对不礼貌的女生收钱......
2006-12-01 20:28
我不是郭靖
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:494
专家分:6
注 册:2006-10-4
收藏
得分:0 

scanf("%d\n");确实是要求数据后边要有一个\n,但当我们输入5\n的时候,系统会认为它是3个字符,而不是5和回车.由于遇到非法的'\'所以输入结束.

对于下边的程序:
#include <stdio.h>

int main()
{
int a;
char c;

scanf("%d\n", &a);
while ((c=getchar()) != '\n' && c != EOF)/*输出缓冲区的内容*/
printf("%d\n", c);

return 0;
}
输入:
5\n
输出:
92
110
Press any key to continue
92是'\'的ASCII码.110是'n'的ASCII码,说明\n并没有被scanf接收.

再看下边的程序:

#include <stdio.h>

int main()
{
int a;
char c;

scanf("%dab", &a);
while ((c=getchar()) != '\n' && c != EOF)/*输出缓冲区的内容*/

printf("%d\n", c);

return 0;
}

输入:
5ab
输出:
Press any key to continue
你会发现缓冲区并没有内容(除回车),说明ab被scanf接收了


2006-12-01 21:07
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 

看来我考虑的有所欠缺,同意楼上观点!同时谢谢soft_wind精彩讲解


[此贴子已经被作者于2006-12-1 21:43:04编辑过]


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2006-12-01 21:41
zhufeifei
Rank: 1
等 级:新手上路
威 望:2
帖 子:402
专家分:0
注 册:2006-8-11
收藏
得分:0 
是啊!谢谢,又学到一点了.

在不断的拼搏与进取中,定能创造一片天地!
2006-12-01 22:04
快速回复:scanf("%d\n",&a)可以这样用么?
数据加载中...
 
   



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

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