C语言函数scanf中"\n"带来的问题
本文最后更新于 644 天前,其中的信息可能已经有所发展或是发生改变。

近日做实验九,有这样一道题:

小鑫の日常系列故事(七)——小纸条
Time Limit: 1000 ms Memory Limit: 65536 KiB

Problem Description
小鑫在高中的时候喜欢上了一个十分漂亮的女孩。那个女孩也很喜欢他,就答应成为他的女朋友。
但是大家都知道高中的生活是忙碌的,除了上课就是上课,有时候可能连课间时间都被老师占用。于是小鑫想出了在上课给女朋友传纸条的方法来表达自己的爱慕。
又但是她与小鑫之间的距离太远,中间必须通过同学来传递纸条。可他们并不想让同学们知道写的什么就想到加密纸条这种方法。方法如下:
他们每天都会约定加密常数n,举个例子,当n=1时,今天写的每一句话中所用的字母都会向后+1,比如:i love you就成了j mpwf zpv ,当然了当是z的时候,+1就等于a。
请你帮他女朋友解密他写的纸条么?

Input
输入为多组,每组为两行。
第一行为n,-50<n<50
第二行为一句话,只有小写字母和空格。长度小于10000

Output
输出解密之后的内容

Sample Input
1
j mpwf zpv

Sample Output
i love you

起初的代码是这样的:

#include<stdio.h>
#include<string.h>
int main()
{
    int n,i,j,k,m;
    char s[10000];
    while (scanf("%d",&n)!=EOF)
    {
        gets(s);
        k=n%26;
        for(i=0;s[i]!='\0';i++)
        {
            if(s[i]==' ')
                continue;
            else
            {
                m=s[i]-k;
                if(m<'a')
                    s[i]=122+1-(97-m);
                else if(m>'z')
                    s[i]=97-1+(m-122);
                else s[i]=m;
            }
        }
        puts(s) ;
    }
    return 0;
} 

但结果却是这样的:
error.jpg

???为啥有换行?一脸懵逼。于是我把scanf("%d",&n)改成了scanf("%d\n",&n) ,看样子结果是对的,但OJ给出了Presentation Error的错误,格式不正确。

经过一番搜索,网络上有人在scanf("%d",&n) 下面加了一句getchar() 。经过改进,成功AC。但为什么呢?

因为scanf在读取字符串时,会自动忽略换行符,但是换行符还是留在缓冲区中。加一句getchar()就可以“吃掉”换行符,接受换行符。一般情况是不需要加getchar() 的,但后面需要输入字符串时需要。

那为什么不能使用scanf("%d\n",&n)呢?

因为在scanf中 “n” 不是表示接受一个回车符,而是表示忽略所有的空白字符(包括回车,空格,tab )。

所以在日常的编程中尽量不要使用scanf("%d\n",&n)的用法。

本文永久链接:https://blog.xmgspace.me/archives/c-scanf.html
本文文章标题:C语言函数scanf中"\n"带来的问题
如文章内无特殊说明,只要您标明转载/引用自Xiaomage's Blog,您就可以自由的转载/引用文章。
授权协议:署名-非商业性使用-相同方式共享 4.0 国际(CC BY 4.0)
暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇