如何在C语言解决printf与scanf先后执行的问题
解决方法用
fflush(stdout);
我们前面有一个scanf函数,会把空白符跟换行符忽略并放入缓冲区,到了第二个scanf函数就会执行 而scanf遇到换行符就会停止,所以就会导致成这种结果,所以我们最好清除掉缓冲区内的数据, 在第一个scanf读取完毕后,记得用清除缓冲区函数把未读取的空白符和换行符丢掉,可以用getchar也可以用setbuf(stdin, NULL);函数,都可以
代码案例
#include "stdio.h"
void main() {
printf("回车输入两个数字进行相加: \n");
//此行代码是解决先执行printf再去执行scanf打印.
fflush(stdout);
int num1, num2;
//定义的是一个字符串,取值的时候就要用 %s
char username[100];
/**
* 第一个 scanf
*/
int result = scanf("%d%d", &num1, &num2);
if (result != 2) {
printf("Invalid input!\n");
return; // return with error code
}
int sum = num1 + num2;
printf("求和: %d + %d = %d \n\n", num1, num2, sum);
/**
* 第二个 scanf
*/
//解决空白顺序输入打印问题.
setbuf(stdin, NULL);
printf("请输入一个用户名\n");
fflush(stdout);
scanf("%s",username);
printf("用户名为: %s\n\n", username);
//----------------------------
setbuf(stdin, NULL);
char check_db;
printf("请输入条件进行选择数据库(a是Book数据库,b是Store数据库,c是Good数据库): \n");
//解决先后顺序
fflush(stdout);
/**
* 第三个 scanf
*/
scanf("%c",&check_db);
switch (check_db) {
//case必须常量,不能是变量值.定义一个char a='a'在此在case a就会报错
case 'a':
printf("当前数据库是 Book \n");
break;
case 'b':
printf("当前数据库是 Store \n");
break;
case 'c':
printf("当前数据库是 Good \n");
break;
default:
printf("找不到对应数据库 \n");
}
}
总结
C的初学者,仅供个人参考,
不做详解,个人学习笔记
,可以供任何人批评指导。_,学习都是按个人方式去学习。
网友评论