关于C语言编程时字符缓冲的一些问题与解答
程序员文章站
2024-01-27 08:06:28
...
关于C语言编程时遇到的一些问题
1.C语言中字符缓冲问题
源代码如下
void writeFile()
{
FILE *fileP;
int ch;
char *fileName; //保存在工程目录下
printf("请输入文件名:");
scanf("%s",fileName);
fileP = fopen(fileName,"r"); //以read
if(fileP == NULL)
{
printf("该文件不存在!\n");
}else{
fileP = fopen(fileName,"w");
fprintf(fileP,"yes you are right !");
}
}
如上代码,当主函数进行调用时,会出现如下问题
原因是缓冲区未清空,系统将输入的字符全部读入。
解决方法
在printf后面加入如下代码
while((ch = getchar()) != '\n' && ch != EOF);
总体代码展示
void writeFile()
{
FILE *fileP;
int ch;
char *fileName; //保存在工程目录下
printf("请输入文件名:");
scanf("%s",fileName);
fileP = fopen(fileName,"r"); //以read
if(fileP == NULL)
{
printf("该文件不存在!\n");
while((ch = getchar()) != '\n' && ch != EOF);
}else{
fileP = fopen(fileName,"w");
fprintf(fileP,"yes you are right !");
}
}
这样即可完成缓冲区的清除
也可以将以上代码进行封装,方便日后使用
#define CLEAR_BUF \
{\
int ch; \
while ((ch = getchar()) != EOF && ch != '\n')\
{\
; \
}\
}
上一篇: C语言中scanf的一些问题
下一篇: IDEA-gradle-控制台乱码
推荐阅读