【发布时间】:2013-10-10 19:00:46
【问题描述】:
我在理解教授给我的一些 C 代码时有些困难。代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char name[1000];
printf( "What's your name? " );
scanf( "%s", name );
printf( "name is %s\n", name );
scanf( "%[^\n]", name ); /* read the entire line (up to but not
including the '\n' at then end) */
getchar(); /* consume the newline from the input */
printf( "name is %s\n", name );
return EXIT_SUCCESS;
}
用户输入一个名字并打印两次:
What's your name? Dan
name is Dan
name is Dan
这让我很困惑。提示用 printf 打印,输入用 scanf 读入缓冲区,缓冲区用 printf 打印。但是,第二个 printf 中的 \n 应该清除缓冲区,那么第二个 scanf 从哪里读取?我认为它会等待用户输入(给定一个空缓冲区),但它不会,它只知道名称。 这是如何运作的?
【问题讨论】: