关于字符数组的输入问题汇总

  1. 输入单个字符的方法
  • a = getchar();

值得注意的是,getchar()函数是遇到回车才将输入字符回送的缓冲区中(并且回车也被送到缓冲区中,因此回车也会被后续的getchar()读取),而且后续的getchar()是从缓冲区中读取字符,而不是从用户输入读取字符。

比如下面这段代码

char a, b; 
while(1)
{
        printf("请输入a, b\n"); 
        a = getchar();
        b = getchar();
        printf("a = %c b = %c\n", a, b);
}

在这段代码中,每次输入到缓冲区的其实是3个字符,还包括最后输入的回车,而每次只能读取两个字符。假如每次都是输入"ab回车",那么缓冲区中的数据如下图所示

每两个getchar()只能读取两个字符,因此会出现乱码的情况。

  • scanf("%c", &a);

scanf()函数可以输入单个字符,但是在连续输入两个字符时也会产生和getchar()一样的问题,也就是scanf()和getchar()在输入单个字符时,都会将回车输入到缓冲区中,而且后面的scanf()也会把缓冲区中的回车读取出来,作为变量的值。

2.输入字符串

  • gets(str);

gets() 函数不仅比 scanf 简洁,而且,就算输入的字符串中有空格也可以直接输入。此外,关于使用 gets() 函数需要注意:使用 gets() 时,系统会将最后“敲”的换行符从缓冲区中取出来,然后丢弃,所以缓冲区中不会遗留换行符。

  • scanf("%s", str);

scanf()在输入字符串的时候,也会将回车读入缓冲区,但是下一次scanf("%s", str)会把缓冲区中剩下的空白字符过滤掉,从缓冲区中的第一个非空白字符开始读取,所以连续的几个scanf()读取字符串不会有问题。

 

对于二维字符数组来说,输入时不能采用下面的方式输入

    for(int i = 0; i < n; i++)
            for(int j = 0; j < m; j++)
                scanf("%c", &map[i][j]);

而应该采用下面的方式输入

     for(int i = 0; i < n; i++)
                scanf("%s", &map[i]);

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值