【发布时间】:2011-05-09 20:12:58
【问题描述】:
此代码向用户询问数据和随后的数字:
$ cat read.c
#include<stdio.h>
#include<stdlib.h>
#define MAX 10
int main() {
char* c = (char*) malloc(MAX * sizeof(char));
int num;
printf("Enter data (max: %d chars):\n", MAX);
fgets(c, MAX, stdin);
// how do I discard all that is there on STDIN here?
printf("Enter num:\n");
scanf("%d", &num);
printf("data: %s", c);
printf("num: %d\n", num);
}
$
问题在于,除了说明最大字符数的指令外,没有什么可以阻止用户输入更多字符,随后将其作为垃圾读入num:
$ ./read
Enter data (max 10 chars):
lazer
Enter num:
5
data: lazer
num: 5
$ ./read
Enter data (max 10 chars):
lazerprofile
Enter num:
data: lazerprofnum: 134514043
$
有没有办法在fgets 调用之后丢弃STDIN 上的所有内容?
【问题讨论】: