编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛  
全能 ASP / PHP / ASP.NET 主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
发新话题
打印

scanf函数中关于“\n”的疑惑

本主题由 卧龙孔明 于 2008-7-25 10:54 解除精华
以前我曾经与一个高手争论过这个东西,最后,我同意那高手的说法,具体的帖子忘了在哪里了,我只记得,那位高手好像叫softwind,那时候还有个叫“我不是郭靖”的版主

当时争论的结果是:\n不做事情,输入的\n字符会留在缓冲区.详细的去找一下那个帖子就应该知道了。
为了中国软件工业的未来,有爱心的朋友请不要帮忙代做作业,或者至少是收费服务!如果您不需要钱,或者您不愿收费用于自己,请把收取的钱用于支援山区贫困学生…谢谢大家!

TOP

我找到了,当时我与那高手争论的帖子(我现在很菜,当时比现在还菜,所以贴中的内容见笑了):
http://bbs.bccn.net/viewthread.php?tid=106414&highlight=scanf%2B%5Cn
为了中国软件工业的未来,有爱心的朋友请不要帮忙代做作业,或者至少是收费服务!如果您不需要钱,或者您不愿收费用于自己,请把收取的钱用于支援山区贫困学生…谢谢大家!

TOP

我也遇到这个问题,有\n得时候,就像进入了死循环,我刚学c,比较菜,也不明白咋回事

TOP

我不知道为什么喜欢在scanf中加个"\n",意义何在?谁举个实际中要用到的例子出来?钻研和钻牛角尖往往只有一线之隔!

TOP

引用:
蓝色神话 在 2008-7-25 10:18 的发言:

我不知道为什么喜欢在scanf中加个"\n",意义何在?谁举个实际中要用到的例子出来?钻研和钻牛角尖往往只有一线之隔!
是吗?钻牛角尖和钻研区别那么小吗?
你在实际中没用过或者没见过就说没有么?世界上有那么多行代码,谁敢说没有?——没有人

搞明白这个问题,不是钻牛角尖。说不定,搞明白后,就真的可以用在实际中。你不要否定,因为,这个东西你尝试过没有?没有!因为没有尝试过,你就没有否定这个说法的资本。

[ 本帖最后由 卧龙孔明 于 2008-7-25 10:24 编辑 ]
为了中国软件工业的未来,有爱心的朋友请不要帮忙代做作业,或者至少是收费服务!如果您不需要钱,或者您不愿收费用于自己,请把收取的钱用于支援山区贫困学生…谢谢大家!

TOP

LS:比如
for(;;)scanf("%d%d ",&a,&b),printf("%d,%d\n",a,b);
上面的代码,在输入1 2<CR>的时候并不会立即显示结果,而必须在输入第三个数字的时候才可以。
在控制台输入的时候,上面的技巧好像完全没有作用,但是别忘了,C的IO函数是同事支持文件操作的。
在文件操作的时候,scanf("%d%d ",...吸收掉了数字后面的空格和回车等空白字符,这样就可以混合使用scanf和gets了。这就是这种写法的用处。
在scanf里面,' ','\t','\n'的用处完全一样,上面的代码自然可以写成scanf("%d%d\n",...不过我一般直接写空格,感觉感觉写'\n'有点不舒服的感觉。
专心编程………
飞燕算法初级群:3996098
我的Blog

TOP

为什么出现这样的情况呢?
那个高手能不能说明一下具体的原因?

TOP

引用:
StarWing83 在 2008-7-25 10:24 的发言:

LS:比如
for(;;)scanf("%d%d ",&a,&b),printf("%d,%d\n",a,b);
上面的代码,在输入1 2的时候并不会立即显示结果,而必须在输入第三个数字的时候才可以。
在控制台输入的时候,上面的技巧好像完全没有作用,但是别 ...
学长回来了...

请教一下:空格等可以吸收一个还是多个字符?
为了中国软件工业的未来,有爱心的朋友请不要帮忙代做作业,或者至少是收费服务!如果您不需要钱,或者您不愿收费用于自己,请把收取的钱用于支援山区贫困学生…谢谢大家!

TOP

我试了一下,可以吸收多个字符
感谢starwing和leeco
为了中国软件工业的未来,有爱心的朋友请不要帮忙代做作业,或者至少是收费服务!如果您不需要钱,或者您不愿收费用于自己,请把收取的钱用于支援山区贫困学生…谢谢大家!

TOP

更好的例子:
复制内容到剪贴板
代码:
#include<stdio.h>
int main(void)
{
    int a,b;
    char t;
    while(scanf("%d%d ",&a,&b)!=EOF)
    {
        while((t=getchar())!='\n')
        {
            printf("%c ",t);
        }
        printf("%d\n",a+b);
    }   
    return 0;
}   
你可以输入
1 1                  1
那么只会输出1 2
这表示,第二个和第三个1之间的所有' '都被吸收了。
为了中国软件工业的未来,有爱心的朋友请不要帮忙代做作业,或者至少是收费服务!如果您不需要钱,或者您不愿收费用于自己,请把收取的钱用于支援山区贫困学生…谢谢大家!

TOP

发新话题