| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 799 人关注过本帖
标题:关于数据输入语句中"\N"的问题
只看楼主 加入收藏
lml190
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2007-5-3
收藏
得分:0 

我也是遇到了这样的问题,虽然解决了,但还不知道为什么?

2007-05-03 11:05
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 

9楼的理解有误,你的之所以能正常输出在于你输入了不合法的字符'\\','n'这两个字符导致scanf函数结束,从而继续往下执行。并非如您所说,要跟着输入"\n"才行.
scanf("%d\n",&num);这种写法很少见到,但不是没有,而且在做某些题的时候必须这样.
scanf("%d\n")其中的'\n'是一个字符,你所按照的格式是因为输入的时候输入不合法的字符导致scanf函数运行结束,从而继续想向下执行.而不是你严格遵从了输入要求的格式使得输入成功了。
你不妨这样一试:scanf("%d\n",&num);//在测试的时候输入3a
答案还是一样的。因为a是非法字符(不是整型值),导致输入结束.C不向JAVA,弹出一个异常就终止程序运行,它只会默默的结束运行函数,而后继续向下执行程序.

但一般来说不应该这样做,应尽量降低输入格式的要求.

------------------------------------------------------------------
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接收了


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-05-03 18:30
nanchangdaxu
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2007-4-30
收藏
得分:0 
楼上孔明兄说的很有道理,佩服!!!!

世上无难事,只要肯登攀!
2007-05-03 22:13
快速回复:关于数据输入语句中"\N"的问题
数据加载中...
 
   



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

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