目录
scanf()
scanf是从标准输入缓冲区中读取输入的数据。
scanf格式输入时要求输入格式与格式控制符中的完全一样,比如:
scanf("abcd%c",&ch);输入时必须输入abcde,ch得到的值为e;
scanf("%d%d",&x,&y);时,输入必须为10 20(注:10和20之间要用空格,回车或TAB键之中的任选一种隔开);
scanf("%d,%d",&x,&y);时,输入必须为10,20;
scanf("%d+%d",&x,&y);时,输入必须为10+20;
%c的字符输入格式
scanf是从标准输入缓冲区中读取输入的数据,而%c的字符输入格式会接收回车字符。
问题
#include<stdio.h>
int main(void){
char a[100];
char k;
int loc;
printf("请输入字符串:");
scanf("%s",a);
printf("n请输入要插入的字符:");
scanf(" %c",&k);
printf("n请输入要插入的位置:");
scanf("%d",&loc);
return 0;
}
在输入第一个scanf时,输入字符后按回车结束,输入缓冲中保存了这个回车符,遇到第二个scanf时,它自动把这个回车符赋给了k。而如果第二个scanf的输入格式不是%c时,由于格式不匹配,这个回车符会被自动忽略,所以只有在连续输入两个字符格式时才会出现这样的问题!
解决方法(任选其一)
1. 清空输入缓冲区
在第一个scanf后加入语句:fflush(stdin); //C语言清空输入缓冲区函数。
2. 格式控制中加入空格
将第二个scanf改为:scanf(" %c",&ch2);//在%号前面加一个空格。scanf格式输入时要求输入格式与格式控制符中的完全一样(如:scanf("abcd%c",&ch);输入时必须输入abcde,ch得到的值为e)空格可以抵消前面输入的回车符。
%d的字符输入格式