c语言字符数组的输入提醒问题

最近在学C语言数组时,想实现一个和Java一样有输入提醒时,发现事与愿违,后来仔细看了一下C语言输入函数的详解,最终得到解决,现在就来分享一下.
先来看一下对比:
这里写图片描述

  1. 在scanf和printf函数中使用格式说明符%c,进行逐个字符输入输出
#include <stdio.h>
int main() {
    /*大家来找茬*/
    char c[5];
    int i;
    for (i = 0; i < 5; i++)
    {
        printf("please enter the char  %d:", i + 1);        
        scanf_s("%c",&c[i]);
        printf("\n");
    }

    for (i = 0; i < 5; i++)
    {
        printf("the char  %d :%c\n", i + 1, c[i]);
    }
    return 0;
}

输入:a(enter键)b(enter键)c(enter键)
运行结果
这里写图片描述

从图片可以看到,把回车键当成了一个字符来处理,主要有以下两个原因:

  • 对于scanf函数:程序运行时,输入数据少于格式说明时,程序等待,直到满足为止,并且一定要按下回车键,sacnf才会接收到从键盘输入得值
  • 对于字符型:数据项之间不能有间隔符

问题:要触发下一个提示语句,就必须要按下回车键,那怎样才能让回车键不被当成字符输入呢?
解决方案:在scanf函数中跳过输入数据——在”%”和格式字符之间加一个“*”号;
我们将以上代码改为:

#include <stdio.h>
int main() {
    char c[5];
    int i;
    for (i = 0; i < 5; i++)
    {
        printf("please enter the char  %d:", i + 1);        
        scanf_s("%c",&c[i]);//修改代码,使用*跳过\n符号
        printf("\n");
    }

    for (i = 0; i < 5; i++)
    {
        printf("the char  %d :%c\n", i + 1, c[i]);
    }
    return 0;
}

运行结果:
这里写图片描述

2.使用getchar输入字符,函数的返回值是所读取的字符的ASCII码值

    c[i]=getchar();

运行结果,也会和第一个一样,把回车键当成了字符处理,这是因为在输入一个字符时,用户还必须要按下回车键才能结束getchar函数并返回值.
解决方法:若想只需输入字符,不按回车键,可以使用getch(),getche()
getche():函数将读入的字符回显到显示屏上
getch():不在显示屏上显示用户输入的字符
注意:一定要#include


#include <stdio.h>
#include <conio.h>
int main() {
    char c[5];
    int i;
    for (i = 0; i < 5; i++)
    {
        printf("please enter the char  %d:", i + 1);        
        c[i]=_getche();//使用getche函数
        printf("\n");
    }

    for (i = 0; i < 5; i++)
    {
        printf("the char  %d :%c\n", i + 1, c[i]);
    }
    return 0;
}

运行结果:
这里写图片描述

  • getch()函数
c[i]=_getch();

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值