我想编写一个函数来读取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
流缓存器的任何多余的字符,即,它应该是空的。该函数不知道在最后一次调用中输入了什么,并且输入缓冲区中可能存在整数和字符。
如何确保函数read_data正常工作?
只需使用'fgets()'并逐行读取输入。比scanf()好得多(包括安全!)。 – 2014-01-09 17:44:12
以后不会调用'fgets()'会遇到同样的问题吗?如果输入字符串比我们传递给'fgets'的缓冲区长?接下来'fgets'调用将从'stdin'缓冲区开始读取。 – ajay
'fgets()'吃掉所有尾随的换行符。如果你传递了一个尺寸为'LINE_MAX'的杂物,那么它就能保持任何一行。 – 2014-01-09 18:30:03