简单举例说明一下C语言的缓冲区

简单举例说明一下C语言的缓冲区

通常情况下,我们通过键盘输入的字符并不会直接到某个变量的内存中,而是先经过缓冲区再到这个变量的内存中。由于缓冲区的存在,有很多莫名其妙的输入输出的问题。接下来我会以这个通讯录程序举例说明。这个通讯录程序主要处理的内容就是输入和输出的各种字符串。在输入完一个字符串之后,如果想再输入一个字符串,前一次残留在缓冲区的字符或字符串会干扰新的字符串,导致读取的数据错误。我们可以用语句 scanf(“%*c”); 来去除不需要的字符,在读完一个字符串后,紧接着用 scanf(“%*c”); 去接收缓冲区残留的\n符号,从而避免输入缓冲区的问题。以下是我的代码,仅供参考。其中的getch.h头文件是我自己定义并实现的,目的是接收按下一个按键的对应的字符。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<getch.h>
#include<strings.h>
#include<unistd.h>

char name[50][20]={0};
char sex[50]={0};
char phone[50][12]={0};

void anykey_continue(){
    puts("按任意键继续...");
    scanf("%*[^\n]");
    getch();
}

void msg_show(const char *msg,float sec){
    printf("%s",msg);
    fflush(stdout);
    usleep(sec*1000000);
}


void add_contact(){
    printf("请输入姓名,性别,手机号:");
    
    for(int i=0;i<50;i++){
        if(sex[i]=='
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<getch.h>
#include<strings.h>
#include<unistd.h>
char name[50][20]={0};
char sex[50]={0};
char phone[50][12]={0};
void anykey_continue(){
puts("按任意键继续...");
scanf("%*[^\n]");
getch();
}
void msg_show(const char *msg,float sec){
printf("%s",msg);
fflush(stdout);
usleep(sec*1000000);
}
void add_contact(){
printf("请输入姓名,性别,手机号:");
for(int i=0;i<50;i++){
if(sex[i]=='\0'){
scanf("%s %c %s",name[i],&sex[i],phone[i]);
scanf("%*c");
msg_show("成功添加联系人\n",1.5);
return ;
}
}
printf("system update\n");
return ;
}
void del_contact(){
printf("请输入要删除的联系人的姓名\n");
char temp[20];
scanf("%s",temp);
scanf("%*c");
for(int i=0;i<50;i++){
char *p=strstr(name[i],temp);
if(p){
sex[i]='\0';
msg_show("删除成功\n",1.5);
return ;
}
}
msg_show("删除失败\n",1.5);
return ;
}
void find_contact(){
printf("请输入要查找的联系人姓名\n");
char temp[20];
scanf("%s",temp);
scanf("%*c");
for(int i=0;i<50;i++){
char *p=strstr(name[i],temp);
if(p){
printf("%s %s %s\n",name[i],('w'==sex[i]||'W'==sex[i])?"女":"男",phone[i]);
msg_show("找到该联系人\n",1.5);
return ;
}
}
msg_show("没找到\n",1.5);
return ;
}
void mod_contact(){
printf("请输入要修改的联系人的姓名:");
char temp[40];
scanf("%s",temp);
scanf("%*c");
int i=0;
for(i=0;i<50;i++){
char *p=strstr(name[i],temp);
if(!p){
printf("没有这个人,退出\n");
return ;
}
else break;
}
printf("请输入修改后的手机号码:");
scanf("%s",temp);
scanf("%*c");
strcpy(phone[i],temp);
printf("修改成功\n");
return ;
}
void show_contact(){
for(int i=0;i<50;i++)
if(sex[i])printf("%s %s %s\n",name[i],('w'==sex[i]||'W'==sex[i])?"女":"男",phone[i]);
anykey_continue();
}
int main(int argc,const char* argv[])
{
for(;;)
{
system("clear");
puts("1、添加联系人");	
puts("2、删除联系人");	
puts("3、修改联系人");	
puts("4、查询联系人");	
puts("5、显示所有联系人");	
puts("6、退出系统");	
printf("请输入指令:");
int cmd=getch();
printf("%c\n",cmd);
switch(cmd)
{
case 49:	add_contact();	break;	
case 50:	del_contact();	break;	
case 51:	mod_contact();	break;	
case 52:	find_contact(); break;	
case 53:	show_contact();  break;	
case 54:	return 0;	
}
}
}
'){ scanf("%s %c %s",name[i],&sex[i],phone[i]); scanf("%*c"); msg_show("成功添加联系人\n",1.5); return ; } } printf("system update\n"); return ; } void del_contact(){ printf("请输入要删除的联系人的姓名\n"); char temp[20]; scanf("%s",temp); scanf("%*c"); for(int i=0;i<50;i++){ char *p=strstr(name[i],temp); if(p){ sex[i]='
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<getch.h>
#include<strings.h>
#include<unistd.h>
char name[50][20]={0};
char sex[50]={0};
char phone[50][12]={0};
void anykey_continue(){
puts("按任意键继续...");
scanf("%*[^\n]");
getch();
}
void msg_show(const char *msg,float sec){
printf("%s",msg);
fflush(stdout);
usleep(sec*1000000);
}
void add_contact(){
printf("请输入姓名,性别,手机号:");
for(int i=0;i<50;i++){
if(sex[i]=='\0'){
scanf("%s %c %s",name[i],&sex[i],phone[i]);
scanf("%*c");
msg_show("成功添加联系人\n",1.5);
return ;
}
}
printf("system update\n");
return ;
}
void del_contact(){
printf("请输入要删除的联系人的姓名\n");
char temp[20];
scanf("%s",temp);
scanf("%*c");
for(int i=0;i<50;i++){
char *p=strstr(name[i],temp);
if(p){
sex[i]='\0';
msg_show("删除成功\n",1.5);
return ;
}
}
msg_show("删除失败\n",1.5);
return ;
}
void find_contact(){
printf("请输入要查找的联系人姓名\n");
char temp[20];
scanf("%s",temp);
scanf("%*c");
for(int i=0;i<50;i++){
char *p=strstr(name[i],temp);
if(p){
printf("%s %s %s\n",name[i],('w'==sex[i]||'W'==sex[i])?"女":"男",phone[i]);
msg_show("找到该联系人\n",1.5);
return ;
}
}
msg_show("没找到\n",1.5);
return ;
}
void mod_contact(){
printf("请输入要修改的联系人的姓名:");
char temp[40];
scanf("%s",temp);
scanf("%*c");
int i=0;
for(i=0;i<50;i++){
char *p=strstr(name[i],temp);
if(!p){
printf("没有这个人,退出\n");
return ;
}
else break;
}
printf("请输入修改后的手机号码:");
scanf("%s",temp);
scanf("%*c");
strcpy(phone[i],temp);
printf("修改成功\n");
return ;
}
void show_contact(){
for(int i=0;i<50;i++)
if(sex[i])printf("%s %s %s\n",name[i],('w'==sex[i]||'W'==sex[i])?"女":"男",phone[i]);
anykey_continue();
}
int main(int argc,const char* argv[])
{
for(;;)
{
system("clear");
puts("1、添加联系人");	
puts("2、删除联系人");	
puts("3、修改联系人");	
puts("4、查询联系人");	
puts("5、显示所有联系人");	
puts("6、退出系统");	
printf("请输入指令:");
int cmd=getch();
printf("%c\n",cmd);
switch(cmd)
{
case 49:	add_contact();	break;	
case 50:	del_contact();	break;	
case 51:	mod_contact();	break;	
case 52:	find_contact(); break;	
case 53:	show_contact();  break;	
case 54:	return 0;	
}
}
}
'; msg_show("删除成功\n",1.5); return ; } } msg_show("删除失败\n",1.5); return ; } void find_contact(){ printf("请输入要查找的联系人姓名\n"); char temp[20]; scanf("%s",temp); scanf("%*c"); for(int i=0;i<50;i++){ char *p=strstr(name[i],temp); if(p){ printf("%s %s %s\n",name[i],('w'==sex[i]||'W'==sex[i])?"女":"男",phone[i]); msg_show("找到该联系人\n",1.5); return ; } } msg_show("没找到\n",1.5); return ; } void mod_contact(){ printf("请输入要修改的联系人的姓名:"); char temp[40]; scanf("%s",temp); scanf("%*c"); int i=0; for(i=0;i<50;i++){ char *p=strstr(name[i],temp); if(!p){ printf("没有这个人,退出\n"); return ; } else break; } printf("请输入修改后的手机号码:"); scanf("%s",temp); scanf("%*c"); strcpy(phone[i],temp); printf("修改成功\n"); return ; } void show_contact(){ for(int i=0;i<50;i++) if(sex[i])printf("%s %s %s\n",name[i],('w'==sex[i]||'W'==sex[i])?"女":"男",phone[i]); anykey_continue(); } int main(int argc,const char* argv[]) { for(;;) { system("clear"); puts("1、添加联系人"); puts("2、删除联系人"); puts("3、修改联系人"); puts("4、查询联系人"); puts("5、显示所有联系人"); puts("6、退出系统"); printf("请输入指令:"); int cmd=getch(); printf("%c\n",cmd); switch(cmd) { case 49: add_contact(); break; case 50: del_contact(); break; case 51: mod_contact(); break; case 52: find_contact(); break; case 53: show_contact(); break; case 54: return 0; } } }

 

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注