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();

这里写图片描述

猜你喜欢

转载自blog.csdn.net/weixin_36027342/article/details/80207600