scanf读字符遇到的问题

最近做题发现一个问题

读字符不能用scanf(其实可以,方法要对)

scanf("%c",&ch);

读入一个字符,输出ASCii码的值

#include <bits/stdc++.h>
using namespace std;
char ch;
int main()//
{
    int i=0;
    while(1)
    {
        scanf("%c",&ch);
        printf("%d ",ch);
    }
    return 0;
}

输出结果是:
在这里插入图片描述
发现输入一个a,执行了两次循环,输出了两个值
97是a的ASCii码的值,

而10是"\n"的值

这说明回车也被读进去了

其实可以这样读:在%c前加一个空格

scanf(" %c",&ch);

结果是

在这里插入图片描述

就完事了

用cin读:

#include <bits/stdc++.h>
using namespace std;
char ch;
int main()//
{
    int i=0;
    while(1)
    {
        cin>>ch;
        printf("%d ",ch);
    }
    return 0;
}

结果是:
在这里插入图片描述

没有问题

当用getchar()读时

#include <bits/stdc++.h>
using namespace std;
char ch;
int main()//
{
    while(1)
    {
        ch=getchar();
        printf("%d ",ch);
    }
    return 0;
}

结果:
在这里插入图片描述

和scanf一样的结果,都是把回车也给读进去了

结论:读单个字符建议用cin读,不然回车也会读进去,也可以用scanf读,不过%c前要加一个空格

猜你喜欢

转载自blog.csdn.net/zhoucheng_123/article/details/104297295