|
![]() | 作者: TecZm [teczm]
![]() |
登录 |
程序这样可以 main() {int a,b,c; scanf("%d\n%d",&a,&b); c=max(a,b); printf("the max is %d\n",c); } int max (int x, int y) {int z; if (x>y) z=x; else z=y; return(z); } 要是把\n改为字符就可以,但是改为数字就不行了。 是不是可以这样认为: 如果取值为int,那么定界符就不能为int,其他可以? 同理,取值为char的话,定界符就不能为char,其他可以? [此贴被 TecZm(teczm) 在 09月30日09时54分 编辑过] |
地主 发表时间: 05-09-28 16:56 |
![]() | 回复: TecZm [teczm] ![]() |
登录 |
另外 \n换成A 输入 123456A654321 得出:max is 654321 如果换成\64 输入 123456A654321 得出的仅是第一个值 为啥涅? |
B1层 发表时间: 05-09-28 17:55 |
![]() | 回复: Shell [f_h] ![]() |
登录 |
晕。我连第一个结果都不是。 12 23 Max is 23 92C - Copyright (c) 1988 Borland Intl. 12 Max is 3117C - Copyright (c) 1988 Borland Intl. 121\A23 Max is 3117C - Copyright (c) 1988 Borland Intl. 12\65232 Max is 3117 格式字符串中不允许有转义字符 [此贴被 Shell(f_h) 在 09月29日08时15分 编辑过] |
B2层 发表时间: 05-09-28 19:27 |
![]() | 回复: TecZm [teczm] ![]() |
登录 |
其实我是想以某个指定的数字作为定界符,比如64 但是scanf("%d64%d",&a,&b); 是不行的。 ![]() |
B3层 发表时间: 05-09-29 08:33 |
![]() | 回复: TecZm [teczm] ![]() |
登录 |
>>>格式字符串中不允许有转义字符 \n也是转义字符吧,为什么可以呢? ps:我的编译器:cc gcc 和dev-c++(gcc for win) |
B4层 发表时间: 05-09-29 08:51 |
![]() | 回复: NetDemon [netdemon] ![]() |
登录 |
整个读入,然后再自己拆分 |
B5层 发表时间: 05-09-29 08:51 |
![]() | 回复: TecZm [teczm] ![]() |
登录 |
>>>整个读入,然后再自己拆分 这也算一种办法,但不是最好的;而且没有回答为什么scanf("%d,%d",&a,&b);语句中可以把逗号换成字符或\n,而不能换成数字的问题。 继续想啊 |
B6层 发表时间: 05-09-29 08:54 |
![]() | 回复: 286 [unique] ![]() |
登录 |
晕人,让你看编译原理你就是不看。 用什么用定界符要看编译器里的有限自动机的设定。在识别时,只要是有效元都会被识别,只要是无效元,都会跳出识别。所以所有无效元都可以作为定界符。 不用的编译器(比如TC,VC,CC)也许用某个定界符,这个能通过,另一个就不一定能通过。 |
B7层 发表时间: 05-09-29 09:13 |
![]() | 回复: kert_t8 [kert_t8] ![]() |
登录 |
我错了我错了![]() 引用: 你如果吧\64改成\102就可以用`B`作为定界符 如果改成\101就可以用`A`做定界符 我当时只记得\可以转义成ascii码,但是具体怎么转我就是瞎说的,算我恶心,给你赔罪 ![]() |
B8层 发表时间: 05-09-29 10:50 |
![]() | 回复: kert_t8 [kert_t8] ![]() |
登录 |
TecZm看好了!64是'A'么??? ----- 当然,是不是A我都错了![]() ![]() |
B9层 发表时间: 05-09-29 11:05 |
![]() | 回复: TecZm [teczm] ![]() |
登录 |
果然如此 scanf("%d\101%d",&a,&b); 可以 ![]() 继续提问哦: 1. 如果以指定的数字作分界符 是不是 不行? 2. scanf("%d、040%d",&a,&b); 以空格作分界符时,无论1个空格或多个空格,在输入时都一样,我的问题是一个空格是\040两个空格怎么也是\040呢? 比如: 引用: 这句等同于 引用: ![]() |
B10层 发表时间: 05-09-29 11:28 |
![]() | 回复: TecZm [teczm] ![]() |
登录 |
3. scanf("%d\060%d",&a,&b);应该是以0为分界符吧,但是这样结果是不对的。 这个可以用有效元和无效元解释么? |
B11层 发表时间: 05-09-29 11:33 |
![]() | 回复: TecZm [teczm] ![]() |
登录 |
总结如下,大家看对不? 1. 取值为数字时,分界符不能为数字,但可以为其他字符。 2. scanf中取值分界符一个空格和2个空格是一样的。 [此贴被 TecZm(teczm) 在 09月30日09时54分 编辑过] |
B12层 发表时间: 05-09-29 12:52 |
![]() | 回复: ziaichen [ziaichen] ![]() |
登录 |
不知道我下面的观点对不对![]() scanf函数读取从键盘输入的数据时,若遇与格式要求不一致的字符,则认为与该字符说明对应的数据结束。 格式控制串中的%d求输入的是连续的数字,若遇到非数字则将认为与该数字对应说明的数据整数读取结束,因此不难解释输入数字的问题,若含有其他的普通字符,输入数据时,这些字符不显示,而是要求这些字符也原样输入,例如scanf("%d,%d",&a,&b),如数数据这样输入 6,8 看下面的实例: scanf("%d%c%f",&a,&b,&c); (1)执行该函数调用时,若输入: 1234x1234.5 则 a=1234 b=x.c=1234.5 (2)若输入: 1234空格x1234.5 则 a=1234 b=空格 c=0 所以不难解释: 1:语句:scanf("%d\n%d",&a,&b); 其实你在输入数据的时候,先输入a后输入空格,后再输入b 和你这样输入: 输入a后回车再输入b的效果是一样的,也可以这样说:/n没有用 2:语句:\n换成A 输入 123456A654321 得出:max is 654321 老师经常要我们采用这种格式 scanf("%d,%d",&a,&b),是因为"%d,%d"中的,起着格式说明的作用,当遇到,表明前面第一个数据输入结束,因此你程序中A 和,的作用一样,而若没有格式说明的话,即scanf("%d%d",&a,&b),则数据输入结束要用空格。TAB或回车分隔。 3:如果换成\65或者其他同样形式 输入 123456A654321 如同此例:(2)若输入: 1234空格x1234.5 则 a=1234 b=空格 c=0 因为此时b的值为0,也就是说\065没用 4:scanf("%d\101%d",&a,&b); 你说可以执行,个人认为b的值还是0 5:scanf("%d\060%d",&a,&b),他不是以0做分界符,\060没用 6: scanf("%d\040%d",&a,&b); 以空格作分界符时,无论1个空格或多个空格,在输入时都一样,我的问题是一个空格是\040两个空格怎么也是\040呢? 这里\040根本就不是代表空格,还有关于空格上面已经讲过,输入空格代表前面数据输入完成,因此你接输入无数个空格也是没作用的,因为这时候系统等待你输入下一个有效数据呢 [此贴被 漏鱼的网(ziaichen) 在 10月02日11时47分 编辑过] |
B13层 发表时间: 05-10-02 11:06 |
![]() | 回复: ziaichen [ziaichen] ![]() |
登录 |
286大哥最近是不是很忙啊 也不来给大家讲讲一下 ![]() |
B14层 发表时间: 05-10-06 01:02 |
![]() | 回复: TecZm [teczm] ![]() |
登录 |
楼上的楼上说的不错![]() |
B15层 发表时间: 05-10-08 11:14 |
![]() | 回复: sweetblood [sweetblood] ![]() |
登录 |
楼上的 也就是说你总结的不对哦 ![]() |
B16层 发表时间: 05-10-12 22:10 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号