最近在学C语言数组时,想实现一个和Java一样有输入提醒时,发现事与愿违,后来仔细看了一下C语言输入函数的详解,最终得到解决,现在就来分享一下.
先来看一下对比:
- 在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();