我想写一个函数来从stdin
读取数据。该功能由其他功能调用,以提示用户输入数据。
void read_data(void) {
// prompt the user by printing a message
// printf("enter data:\n");
int a;
char name[40];
scanf("%d", &a);
// prompt for input again
scanf("%39[^\n]", name);
// do something with the data
}
为了使函数read_data
正常工作,stdin
流缓冲区中不应存在任何无关的字符,即它应该为空。该函数不知道在上一次scanf
调用中输入了什么,并且输入缓冲区中可能存在整数和字符。
如何确保函数read_data正常工作?
答案 0 :(得分:1)
void read_data(void) {
// prompt the user by printing a message
// printf("enter data:\n");
int a,c;
char name[40];
scanf("%d", &a);
while((c=getchar()) != '\n');
// prompt for input again
scanf("%39[^\n]", name);
while((c=getchar()) != '\n');
// do something with the data
}
将第一个scanf与
一起使用 while((c=getchar()) != ' ' && c != '\t' && c != '\n');
因此,如果给定的字符是'\ n',则getchar函数获取该字符并检查它是否为新行,如果它是新行,如果移动到其他地方它会到达换行符,因此stdin流缓冲区被清除。 / p>