prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 12.18a

Q我正在使用scanf%d读取一个数字,然后使用gets():

	int n;
	char str[80];

	printf("enter a number: ");
	scanf("%d", &n);
	printf("enter a string: ");
	gets(str);
	printf("you typed %d and \"%s\"\n", n, str);
读取一个字符串,但编译器似乎跳过了对gets()!


A如果程序对此作出响应,您将键入这两行

	42
	a string
scanf会读取 42,但会读取其后的换行符。该换行符将保留在输入流中,它将立即满足gets()(因此它似乎读取了一个空行)。第二行,“a string”,根本不会被读取。

如果您恰好在同一行键入了数字和字符串

	42 a string
代码的工作方式将与您预期的差不多。

总的来说,您不应该尝试交织调用scanf与调用gets()(或任何其他输入例程);scanf对换行符的特殊处理几乎总是会带来麻烦。要么使用scanf来读取所有内容或不读取任何内容。

另请参阅问题 12.2012.23

其他链接: 更长的解释

参考文献: ISO 第 7.9.6.2 节
H&S 第 15.8 节 pp. 357-64


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管